ほら!
http://d.hatena.ne.jp/kikx/20061120#1164011256
こんな人が出てくるから*1、益々C言語が負の要素のせいで栄えるんだよ!
悔しいから問題出してやります。(←言動不一致)
int *(*x[3])(int, int); int *(*y)[3](int, int); int *(*z(int, int))[3];
xは関数ポインタの配列、yはコンパイルエラー、zは配列へのポインタを返す関数。
a b c (f g h name j i) e d;と来たらname: j of i of h of g of f of e of d of c of b of a;と読み替えればいいです。個人的には左右でかかる方向まで違うのが酷いと思ってます。C#とかJavaが要素数書かせない方向に走ったのはこの所為じゃないかと(だから要素数を逆順に書かせるDは開き直りっぷりが好き)。また例外としてa位置にconst(の類)が来たらa bが入れ代わります。cにはかからないので、是非普段からconst int x = 1;ではなくint const x = 1;と書く習慣を。
自称C言語嫌いを舐めないでいただきたいですね。もう延々延々言い続けて「だからC言語は(ry」と言ってきたのですが、誰一人説得されてくれないので、疲れたよワタシャ。
C の型宣言は,英語で読まないと 100 % 混乱する.日本語で読んだら負けだ !
http://alohakun.blog7.fc2.com/blog-entry-703.html
そういう理解は「英語は名詞と動詞があーなのでオブジェクト指向に強い*2」と同じでよく無いと思います。英語だってA-ed BとB of Aでかかる向き変わるし。まぁCの宣言はPascalに読み替えないと理解できない私の言うことですけど。