プロが教える店舗&オフィスのセキュリティ対策術

C言語のコーディングについて,教えてください。
次のような処理を実現するには,どのようにコーディングすれば良いでしょうか。
[概要]
複数ある関数を,for文中からループカウンタを使用して関数を呼び出したい。
なお,関数に渡すパラメタの個数と属性は,すべて同じです。
[例]
int 関数1(int);
int 関数2(int);
int 関数3(int);
int *ptr[3]; ・・・ループ中に使用する領域の定義がわかりません
ptr[0]=&関数1; ・・・この求め方でよいですか?
ptr[1]=&関数2;
ptr[2]=&関数3;
for(wk=0,wk<3,wk++)
{
rc=ptr[wk](wk); ・・・この関数呼び出しがわかりません
}
:
int 関数1
:

教えて!goo グレード

A 回答 (2件)

こういうことでしょうか。


#include <stdio.h>

int sub1(int);
int sub2(int);
int sub3(int);

int main(void){

int (*ptr[3])(int);
int wk;
int rc;
ptr[0] = &sub1;
ptr[1] = &sub2;
ptr[2] = &sub3;
for (wk = 0; wk < 3; wk++){
rc = ptr[wk](wk);
printf("rc=%d\n",rc);
}
return 0;
}
int sub1(int p)
{
printf("This is sub1:%d\n",p);
return (10 + p);
}
int sub2(int p)
{
printf("This is sub2:%d\n",p);
return (20 + p);
}
int sub3(int p)
{
printf("This is sub3:%d\n",p);
return (30 + p);
}

--------------------------
実行結果
This is sub1:0
rc=10
This is sub2:1
rc=21
This is sub3:2
rc=32
    • good
    • 0
この回答へのお礼

回答,ありがとうございます。
教えていただいたコーディングでできそうです。

お礼日時:2021/11/02 11:28

そもそも関数を分ける必要性・必然性があるのだろうか?



関数内部で処理を分岐するとかでは駄目なんかな・・・・
    • good
    • 0
この回答へのお礼

回答,ありがとうございます。
コマンドプロンプトから入力された値に従って,呼び出す関数を変更したいのです。
たとえば,「testcmd op1=2 op2=3 op3=5」と入力された場合,argvの個数-1分ループし,ループ中にop1解析用関数1,op2解析用関数2,op3解析用関数3を呼び出したいのです。

お礼日時:2021/11/02 11:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

教えて!goo グレード

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング