ほら!

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に読み替えないと理解できない私の言うことですけど。

*1:超恥ずかしい追記。kikxさんの記事の日付(ry

*2:脱線の脱線を解説するのもあれですがWindow.Createは一見名詞動詞の順で英語読みできるように思えますがよく考えて見るとcreateは他動詞なのでCreateWindowの方が正しい罠とか、名詞抽出法なんて云々とか、まあ。本音としては、いちいち自然言語にして読み下したりしねーよ、とか、そんな。今日は悪態モードでごめんなさい。