codeknowledge.livedoor.blog/ar
問30.苦戦されているようですのでヒント。状態遷移変数を使わず関数ポインタでということなので、グローバルエリアに

typedef void(*FuncStatus)(void);
FuncStatus pFunc = 0;

この pFunc の値を状態によって書き換えて、メインからは

while (true) { pFunc(); }

このように pFunc を単純に呼ぶだけとなります。

先生・・・!!今まさに、その問題について「一歩前進になりそうなことを昨日の夜思いついたけど、問題文に書いている範囲内のことでしかなかった」

という話を投稿しようとしていました。

先生実はエスパー・・・

ヒントをありがとうございますm(_ _)m。

投稿文練ってる間に時間たっているから、謎感漂う返信になってしまった・・・

ほぼ「よし、投稿するぞ」と思った瞬間に、ぴろ~ん、と先生の投稿が表示されたので、かなりびっくりしました😅

まあ、うん、そろそろ限界かなーって思ったのでw

フォロー

お見通し・・・😓

今日もう一度講座を読み返して、ヒントと合わせて、分かった気がしました。

本日墓参り等々があるけれど、多分今日中に提出できる・・・はず(そして、時間があれば1問目をもう一度見直そうと思っています。絶対アレ「そっちじゃない」方へ走ったと思うので)

ヒントはここまでです。最後の「壁」を無事超えられますことをお祈りしています。

ぜーぜーはーはー・・・一応それっぽい感じのことをやり、無事動作を確認しました。

ただ、ヒントで書いて頂いたFuncStatus pFunc=0;

という記述に持って行けず、

FuncStatus pFunc=deployShips;

といった形で、具体的に関数名を記入する方式になりました。

この場合は、各状態の関数ポインタを配列に収めた方がいいような気がしていますが・・・

あ、すいません、=0 はコンパイルエラーを消すためのダミーです^O^;


> 関数ポインタを配列に収めた方がいい

これをしちゃうと結局状態を表す変数が必要になりますので、配列に入れないほうが「この場合は」良いです。配列(?)に入れるやり方もありますが、それはもう一段上の話で基礎から完全にハズレてしまうので😓

コメントありがとうございます。

なるほど、=0とあったので、数字にして+1等するのかと思っていました。deployShips等、関数名部分を記述すると、その手は使えないなあ、と思って・・・

こうしてテストを受けてみると、「分かっていない」部分が如実に出るなあとしみじみ思いました。

ポインタの存在には、慣れて来た気がします。ありがとうございます!

ええ、存在になれただけで、記法はもちろん、使い方も全然ですが・・・😓 とほほ

ログインして会話に参加
Fedibird

様々な目的に使える、日本の汎用マストドンサーバーです。安定した利用環境と、多数の独自機能を提供しています。