2008-05-21アストロンとマホトラのコンボ攻撃
Re:Cでのポインタの読み方
C | |
これ非常に分かりやすい。
ルール
- 後置演算子が優先。
- 関数の()
- 配列の[]
- 前置はあとで。
要は、「後ろに何かあったら、後ろが優先」です。
演算子の英語での読み方
Cでのポインタの読み方
- * pointer to ...
- () function returning ...
- [] array of ...
ってルールに沿って解釈して行く。読み解く例は元記事にたくさん書いてある。
演習問題があるので、実際にやってみる。
char *(*c[10])(int *p);
こんな感じかな。
-
char *(*c[10])(int *p);- c is array of ...
-
char *(*c[10])(int *p);- c is array of pointer to ...
-
char *(*c[10])(int *p);- c is array of pointer to function returning ...
-
char *(*c[10])(int *p);- c is array of pointer to function returning pointer to ...
-
char *(*c[10])(int *p);- c is array of pointer to function returning pointer to char
つまり、変数cはchar型のポインタを返す関数ポインタの配列。
int (*(*p)(int *a))[5];
-
int (*(*p)(int *a))[5];- p is pointer to ...
-
int (*(*p)(int *a))[5];- p is pointer to function returning ...
-
int (*(*p)(int *a))[5];- p is pointer to function returning pointer to ...
-
int (*(*p)(int *a))[5];- p is pointer to function returning pointer to array of ...
-
int (*(*p)(int *a))[5];- p is pointer to function returning pointer to array of int
つまり、変数pはint型の配列ポインタを返す関数のポインタ。
こんな感じかな。
まとめ
K&Rの巻末にBNFが載ってた気がするので、変数宣言部のみのルールを抽出してパーサー書けば、この言い回しのジェネレータ作れるねwww
トラックバック - http://zigorou.g.hatena.ne.jp/ZIGOROu/20080521
こんな辺境の地までありがとうございます。
K&R 5.12っすか。読んだはずなんだけど頭からすっ飛んでました><
復習しまーす。