2011-09-20 8 views

答えて

3

記載のとおり、かっこでは違いはありません。

いわゆるスパイラルルールはCの文法のこの単純な事実から外れ:*f()*a[]ような表現が*(f())*(a[])として解析されますので、そのような()[]として後置演算子は、*のような単項演算子よりも高い優先順位を持っています。だから、

 foo   -- foo 
    (*foo)   -- is a pointer (parens force grouping) 
    (*foo)()   -- to a function 
(*(*foo)())  -- returning a pointer (parens force grouping again) 
(*(*foo)())[N]  -- to an array 
*(*(*foo)())[N]  -- of pointer 
として解析し

*(*(*foo)())[N] 

のような比較的複雑な表現与え

2

はい、同じです。 char *(argv[])は、の配列のポインタを意味します。

char (*argv)[]は、charの配列へのポインタを意味するので、これとは異なります。

1
  1. argv[]ので(argv[])は、関数宣言することはできませんタイプではありません - それは優先順位の操作です。
  2. *argv[]と同じように、最初に[](優先順位かどうか)を見つけてから*を見つけます。したがって、それらは等しいです。