2011-08-01 42 views
1

私が定義した関数を持って理解することができません:次のようにC関数呼び出し

int foobar(char *ptr,...) 

を関数呼び出しは次のとおりです。

int (*fooptr) (char *,...) = foobar; 

私は関数が呼び出さなっているかを理解することはできませんよ。 .. ありがとうございます

答えて

8

これは関数呼び出しではありません。

ファンクションポインタという変数が、ファンクションのアドレスを保持するfooptrと宣言されています。あなたが例えばだろうポインタを経由して、その関数を呼び出すように:

int return_value = (*fooptr)(char_ptr, x, y, z); 
+0

'宣言'と 'インスタンス化'もですか? – hari

+0

@hari - 変数_宣言_も変数を初期化できます。 – sje397

0

それは呼び出しません

fooptrです。

0

投稿したコードで関数が呼び出されることはありません。最初の行は関数宣言であり、2番目の行は関数宣言へのポインタです。それを呼び出すには、foobar(myCharPtr[, other arguments])またはfooptr(myCharPtr[, other arguments])を使用する必要があります。

0

あなたの例では関数が呼び出されていません。そのアドレスは関数ポインタであるfooptr変数に格納されます。後でその関数ポインタがfoobarファンクションを指している間に呼び出すと、foobar関数が呼び出されます。

あなたはように、第2行を書くことができます。それをより明確にするために

// declare fooptr as a variable of type function pointer 
// taking (char*,...) and returning int 
int (*fooptr) (char *,...); 
// take the address of foobar function and assign it to fooptr 
fooptr = &foobar; 

0

これはvarargs functionであり、可変数のパラメータを受け取ることができます(printfに似ています)。あなたが与える2行目は代入であり、関数呼び出しではありません。