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