2017-05-01 8 views
-1

配列から関数Greetingを呼び出そうとしています。誰かが私にヒントを与えたり、ビデオや読書をオンラインで教えてください。おかげCの配列から関数を呼び出す

int Greeting() 
{ 
    printf("Hello, World!\n"); 
    return 0; 
} 

int process[]={0,0,&Greeting,0,0,0}; 

int main() 
{ 
    process[2]; 
    return 0; 
} 
+2

intの配列があります。代わりに、関数ポインタの配列が必要ですし、関数を格納して呼び出すことができます。 – Trenin

+1

すべてのコンパイラの警告を有効にします - 多くの_hints_を提供し、時間を節約します。 – chux

+0

'Greeting'の前に'& 'は必要ありません。関数名は、関数へのポインタに減衰します。 –

答えて

3

あなたprocessintの配列です。関数ポインタの配列にする必要があります。

int (*process[])(void) = {0, 0, Greeting, 0, 0, 0}; 

次に、2つの関数ポインタを構造体に最初に作成された単純な例は、三つの機能が作成され、間接的

process[2](); 
+0

ideoneで動作するコード:http://ideone.com/MV91M1 – pmg

1

関数を呼び出します。呼び出したい関数で関数ポインタを初期化し、引数を渡して作業を完了させます。

#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); 
} 
関連する問題