JavaScriptに、関数を配列に入れておいて呼び出すときに簡易化する方法があったんですが、Cでは可能でしょうか?簡易化するのは。
※かなり適当に書いてます。感じで見てください。
exec = (0, func1, func2, func3, func4);
func1(){return 1;}
func2(){return 2;}
func3(){return 3;}
func4(){return 4;}
//ここで配列に指定してある関数を呼び出す
for(i=0; i<4; i++)
document.write(exec[i]());
ちなみに,関数をプロトタイプ宣言しといて
char* exec = {0, func1, func2, func3};
とやりましたが当然無理でした。
> char* exec = {0, func1, func2, func3};
> とやりましたが当然無理でした。
当然無理ですね。char * じゃ。
int func1();
int func2();
int func3();
typedef int ( *pFunc )();
pFunc exec[] = { &func1, &func2, &func3 };
こんな感じに宣言して、
for( int i = 0; i < 3; ++i )
{
int ret = ( *exec[ i ] )();
}
こう実行、かな。
す・・・すごい。できた。
シャノンさんありがとうございます。
あと、
typedef int (*pFunc)();
のところって関数のポインタを定義して、その定義した型で
exec[]に入れたってことでいいんですか?
なんか始めたばかりでポインタ少しあやふやで・・・。
解決したので。
> typedef int (*pFunc)();
> のところって関数のポインタを定義して、その定義した型で
> exec[]に入れたってことでいいんですか?
そです。
> typedef int (*pFunc)();
これは、「引数が無く、int 型の戻り値を返す関数のポインタ型」に、pFunc という別名をつけています。
で
> pFunc exec[] = { &func1, &func2, &func3 };
pFunc 型の配列 exec を確保し、関数のポインタを入れる、と。
シャノンさん、解説ありがとうございました。
これで理解できました。
ツイート | ![]() |