私が定義した関数を持って理解することができません:次のようにC関数呼び出し
int foobar(char *ptr,...)
を関数呼び出しは次のとおりです。
int (*fooptr) (char *,...) = foobar;
私は関数が呼び出さなっているかを理解することはできませんよ。 .. ありがとうございます
私が定義した関数を持って理解することができません:次のようにC関数呼び出し
int foobar(char *ptr,...)
を関数呼び出しは次のとおりです。
int (*fooptr) (char *,...) = foobar;
私は関数が呼び出さなっているかを理解することはできませんよ。 .. ありがとうございます
これは関数呼び出しではありません。
ファンクションポインタという変数が、ファンクションのアドレスを保持するfooptr
と宣言されています。あなたが例えばだろうポインタを経由して、その関数を呼び出すように:
int return_value = (*fooptr)(char_ptr, x, y, z);
それは呼び出しません
。 ののfooptr
です。
投稿したコードで関数が呼び出されることはありません。最初の行は関数宣言であり、2番目の行は関数宣言へのポインタです。それを呼び出すには、foobar(myCharPtr[, other arguments])
またはfooptr(myCharPtr[, other arguments])
を使用する必要があります。
あなたの例では関数が呼び出されていません。そのアドレスは関数ポインタである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;
。
これはvarargs functionであり、可変数のパラメータを受け取ることができます(printfに似ています)。あなたが与える2行目は代入であり、関数呼び出しではありません。
'宣言'と 'インスタンス化'もですか? – hari
@hari - 変数_宣言_も変数を初期化できます。 – sje397