2016-12-08 8 views
2

引数を渡す関数の名前を使用するとき、その関数へのポインタを使用していますか?関数の名前です。その関数へのポインタですか?

例:

int foo(int a, int b); 

int main(void) 
{ 
    int a = foo(1,3); //foo() it's a pointer to the function foo()? 
    return 0; 
} 
+0

いいえ、それは関数を呼び出すだけです。 –

+3

関数名は、引数として渡されたときにポインタに減衰します。それはあなたが本当に気にするべきことです。 – StoryTeller

+0

それはその関数のコードのアドレスにジャンプするようにコンパイルしますので、ポインタですが、それはポインタの通常の理解ではありません。その点については、任意の変数はメモリ内のスペースへのポインタであると理解することができます – MotKohn

答えて

5

あなたが探している用語が機能指名です。 ポインタタイプではありませんが、ほとんどの場合、に変換されます。

引用C11標準、関数指定子は、関数型を持つ式である

チャプタ§6.3.2.1、(強調鉱山)。それはsizeofオペレータの オペランドである場合を除いて、_Alignofオペレータ、65)又は単項&オペレータ、「機能復帰タイプ「」」タイプ 関数指定子は、 '型を持つ式に変換され'関数型を返す関数へのポインタ' '

関連、「関数呼び出し」仕様の一部で、章6.5.2.2

呼び出される関数92を表す式) はvoidを返すまたは返す機能させるタイプのポインタを持たなければならないから、配列型以外の完全なオブジェクト型教えてくれる

、関数呼び出しで、指示が実際にポインタに変換されます。

関連する問題