0

私は k&r の複雑な宣言の部分を経験していました.私はこの特定の宣言について疑問を抱きました.

char(*(*x[3])())[5]

なぜそれが char[5] (*(*x[3])()) できないのですか?この宣言は合法ですか?

 int* (*(*x)())[2];
4

1 に答える 1

1

演算子の優先順位とスパイラルルールの適用に従って、

char(*(*x[3])())[5]

と同等です

x は、char の配列へのポインターを返す関数へのポインターの配列です。

しかし、

char[5] (*(*x[3])())

配列の添字は宣言の最後にある必要があるため、構文エラーが発生します。nothingこれに螺旋の法則を当てはめてみます。

また、

int* (*(*x)())[2]; 

完全に合法であり、その宣言は次のように述べることができます

x は、int へのポインターの配列へのポインターを返す関数へのポインターです。

複雑な宣言を解読するのに役立つJava アプレットを確認し、複雑な宣言を作成する方法に関する記事を読んでください。

[]@Steve Jessopのコメントも、最後に行く理由についてもっともらしいようです。

于 2012-06-26T12:04:28.720 に答える