2017-12-30 41 views
-5

次のタイプのポインタ宣言とC言語の違いは何ですか?C言語のポインタ宣言を理解するための助けが必要

int *p(int a), 
int (*p)(int a), 
int *(*p)(it(*a)[]), 

適切な説明のためにいくつかの例が追加されていれば非常に便利です。

+0

https://cdecl.org/を試して、 'a'の例を除いて式を入力してください:' int *(* p)(int(*)[]) ' – 4386427

+0

3番目の1つは決してそれを使用しないことです。そうした場合、コードレビュー直後に解雇される可能性があります。 –

答えて

1
int *p(int a); 

私はそれがポインタ宣言であることを強く疑う。書かれた方が良い場合は、関数intで、intへのポインタを返すことがわかります。


int (*p)(int a); 

基本的な関数ポインタ。 pは、intを取り、intを返す関数を指しています。例えば:それは無効だから

int foo(int x) { return x+1; } 
p = &foo; 

最後のものは少し複雑です。括弧の中に数字があったはずです。私はそれが以下のように修正されている(誤字を含む)と仮定します。

int *(*p)(int(*a)[3]); 

それは関数ポインタだ、関数は3つのintの配列へのポインタをとり、intへのポインタを返します。例えば:

int *extract_first(int (*a)[3]) { 
    return (*a); 
} 
p = &extract_first; 
+0

'3 'を追加する必要はありますか?私はC言語では正しいとは思わないが、C++でしかない – 4386427

1

最初はFA関数宣言であり、それは 第ポインタツー関数INTを取り、場合INT を返して、INTを受け取り、ポインタ・ツー・intを返し第三のがされているべきである:

int * (*p) (int(*a)[]); 

それへのポインタ関数へのポインタ・アレイの-INTを取り、ポインタ・ツー・INTを返しています。

関連する問題