配列から関数Greetingを呼び出そうとしています。誰かが私にヒントを与えたり、ビデオや読書をオンラインで教えてください。おかげCの配列から関数を呼び出す
int Greeting()
{
printf("Hello, World!\n");
return 0;
}
int process[]={0,0,&Greeting,0,0,0};
int main()
{
process[2];
return 0;
}
配列から関数Greetingを呼び出そうとしています。誰かが私にヒントを与えたり、ビデオや読書をオンラインで教えてください。おかげCの配列から関数を呼び出す
int Greeting()
{
printf("Hello, World!\n");
return 0;
}
int process[]={0,0,&Greeting,0,0,0};
int main()
{
process[2];
return 0;
}
あなたprocess
はint
の配列です。関数ポインタの配列にする必要があります。
int (*process[])(void) = {0, 0, Greeting, 0, 0, 0};
次に、2つの関数ポインタを構造体に最初に作成された単純な例は、三つの機能が作成され、間接的
process[2]();
ideoneで動作するコード:http://ideone.com/MV91M1 – pmg
関数を呼び出します。呼び出したい関数で関数ポインタを初期化し、引数を渡して作業を完了させます。
#include <stdio.h>
typedef struct
{
/* Any function who take two int parameters and returns int can be pointed by this function pointer. */
int (*function_name)(int a, int b);
/* This can point to all functions having int argument and void return type */
void (*print_fn)(int sum);
} FN_GROUP;
int add(int a, int b)
{
return (a + b);
}
int subtract(int a, int b)
{
return (a - b);
}
void show(int num)
{
printf("Result:%d\r\n", num);
}
int main()
{
int num1 = 20;
int num2 = 10;
int result = 0;
FN_GROUP group;
/* Initialize the pointers with add() and show() functions. */
group.function_name = &add;
group.print_fn = &show;
/* Now call these functions. */
result = group.function_name(num1, num2);
group.print_fn(result);
/* Initialize the pointers with subtract(). */
group.function_name = &subtract;
/* Now call these functions again */
result = group.function_name(num1, num2);
group.print_fn(result);
return (0);
}
intの配列があります。代わりに、関数ポインタの配列が必要ですし、関数を格納して呼び出すことができます。 – Trenin
すべてのコンパイラの警告を有効にします - 多くの_hints_を提供し、時間を節約します。 – chux
'Greeting'の前に'& 'は必要ありません。関数名は、関数へのポインタに減衰します。 –