2016-05-01 3 views
-3

アスタリスクをどこに置いても問題はないと言われました。ポインタの構文の相違点

int* p; 
int *p; 

は同じです。しかし、複雑になると混乱します。たとえば、これを行うことができます:

int (*(p)); 
int** (*(p)); 
int*** (*(p)) {}; 

これらの宣言に違いはありますか?

+2

ですすべて"。 '*'をどこにでもランダムに配置できるということではありません。 –

+0

'('と ')'をすべてこのようなコードに入れるのはなぜですか?これを関数ポインタと混在させていますか? – 4386427

+0

@ 4386427もちろん、2番目のフラグメントの1番目と2番目の宣言に括弧は使用されませんが、そのようなタイプの周りに括弧を追加するのは合法です。 3番目は構文エラーです。 –

答えて

6

int (*(p));intへのポインタです。

int** (*(p));は、intへのポインタへのポインタです。

int*** (*(p)) {};「あなたはポインタにアスタリスクを置く場所それは問題ではない」、後に、両方、またはないで、あなたの前に空白を持っているかどうかは問題ではない」ことを意味C.

で無効な構文