私は k&r の複雑な宣言の部分を経験していました.私はこの特定の宣言について疑問を抱きました.
char(*(*x[3])())[5]
なぜそれが
char[5] (*(*x[3])())
できないのですか?この宣言は合法ですか?
int* (*(*x)())[2];
私は k&r の複雑な宣言の部分を経験していました.私はこの特定の宣言について疑問を抱きました.
char(*(*x[3])())[5]
なぜそれが
char[5] (*(*x[3])())
できないのですか?この宣言は合法ですか?
int* (*(*x)())[2];
演算子の優先順位とスパイラルルールの適用に従って、
char(*(*x[3])())[5]
と同等です
x は、char の配列へのポインターを返す関数へのポインターの配列です。
しかし、
char[5] (*(*x[3])())
配列の添字は宣言の最後にある必要があるため、構文エラーが発生します。nothing
これに螺旋の法則を当てはめてみます。
また、
int* (*(*x)())[2];
完全に合法であり、その宣言は次のように述べることができます
x は、int へのポインターの配列へのポインターを返す関数へのポインターです。
複雑な宣言を解読するのに役立つJava アプレットを確認し、複雑な宣言を作成する方法に関する記事を読んでください。
[]
@Steve Jessopのコメントも、最後に行く理由についてもっともらしいようです。