2

以下の宣言の違いは何ですか?

char *argv[];

char *(argv[]);

スパイラルルールでも同じだと思います。

4

3 に答える 3

3

書かれているように、括弧は違いはありません。

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

したがって、次のような比較的複雑な式が与えられた場合

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

それは次のように解析します

     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
于 2011-09-20T16:04:41.293 に答える
2

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

char (*argv)[]の配列へのポインターを意味するため、異なりcharます。

于 2011-09-20T14:48:59.203 に答える
1
  1. argv[]は型では(argv[])ないため、関数宣言にすることはできません。これは優先操作です。
  2. スパイラル ルールを使用して、最初に[](優先順位の有無にかかわらず) を見つけ、次に*を見つけます*argv[]
于 2011-09-20T14:49:31.070 に答える