- 締切済み
関数ポインタについて
C言語の関数ポインタの問題で以下のような問題で、実際に解いて、プログラムを動かしてみてみました。 正常に動作したのですが、この回答では満点はもらえませんでした。 このほかに良い解答例などありましたら、教えていただけないでしょうか。 どうかよろしくお願い致します。 [問題]次の※1・※2を埋めなさい(「func1」,「func2」は解答に含まれないように書くこと)。 #include <stdio.h> void func1() { printf("func1\n"); } void func2() { printf("func2\n"); } void func(int no) { void (*func[2])(void) = {func1, func2}; /* ※1 (*func[no])() */; } int main() { /* ※2 func(1) */; return 0; } 実行結果:func2
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- titokani
- ベストアンサー率19% (341/1726)
「void func(int no)の仕様が不明なので、回答不能です」って回答するとどうなるのかな?
- Tacosan
- ベストアンサー率23% (3656/15482)
いや, 「穴埋め」とかそんなのはどうでもよくて, この関数 func がどのようなものなのか仕様を与えないと無意味だね, ってこと. 極端にいえば, ※1 のところを func[1](); と書いたっていいことになっちゃう.
- ts244
- ベストアンサー率41% (53/127)
※1を(*func[no ? 1 : 0])() にしろ なんてことは無いですよね?
- Trick--o--
- ベストアンサー率20% (413/2034)
察するに、func(1)と指定しているのにfunc2と出力されるのは可読性が悪いので中間点、といったところでしょうか。 1なのか2なのかはっきりしろ! という。 ※1を (*func[no-1])() にすれば、1と2でそれぞれ対応がとれてよさそうだけど。
- Tacosan
- ベストアンサー率23% (3656/15482)
何をするプログラムなんでしょうか? ちなみにどんなプログラムが「満点」なんでしょうか?
補足
>Tacosanさんへ これはプログラミングの穴埋め問題になっていて、 空欄(ここでは※1、※2)にプログラムを入力して採点してもらうと、 正解か不正解か表示される方式となっています。 ちなみに解答は表示されないので、何が正しいのか 正解するまでわかりません。