関数の配列化

解決


origi  2004-11-27 22:24:43  No: 55378

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};
とやりましたが当然無理でした。


シャノン  2004-11-27 22:45:57  No: 55379

> 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 ] )();
}

こう実行、かな。


origi  2004-11-27 23:46:01  No: 55380

す・・・すごい。できた。
シャノンさんありがとうございます。
あと、
typedef int (*pFunc)();
のところって関数のポインタを定義して、その定義した型で
exec[]に入れたってことでいいんですか?
なんか始めたばかりでポインタ少しあやふやで・・・。


origi  2004-11-27 23:46:27  No: 55381

解決したので。


シャノン  2004-11-28 00:16:44  No: 55382

> typedef int (*pFunc)();
> のところって関数のポインタを定義して、その定義した型で
> exec[]に入れたってことでいいんですか?

そです。

> typedef int (*pFunc)();

これは、「引数が無く、int 型の戻り値を返す関数のポインタ型」に、pFunc という別名をつけています。

> pFunc exec[] = { &func1, &func2, &func3 };

pFunc 型の配列 exec を確保し、関数のポインタを入れる、と。


origi  2004-11-28 05:37:17  No: 55383

シャノンさん、解説ありがとうございました。
これで理解できました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加