- 1 名前:デフォルトの名無しさん [2010/06/30(水) 10:22:47 ]
- なぜポインタで引っかかる人が多いのか
引っかかる人は何に困惑しているのか
- 232 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 01:41:39 ]
- 書き方を修正。「$T」じゃなくて「T$」に変えてみた。
・char , int は型である。 ・Tが型ならば、T[N]は型である。(Tの配列と解釈する) ・Tが型ならば、T$は型である。(Tへのポインタと解釈する) ・T,U1,U2,…,Umが型ならば、T(U1,U2,…,Um)という記号列は型である。(関数と解釈する) ・宣言方法は「T a;」とする。
- 233 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 01:46:37 ]
- 以下、具体例。(長文失礼します)
具体例(カッコは適宜省略) C言語での表記法 ↓ ↓ int$ a; ( int* a; ) (int$)$ a; ( int** a; ) (int$)[N] a; ( int* a[N]; ) (int[N])$ a; ( int (*a)[N]; ) (int(char))$ f; ( int (*f )(char); ) (int$)(char) f; ( int* f (char); ) int(char$) f; ( int f (char*); ) ((int(char))$)[N] f; ( int (*f [N])(char); ) ((int(char))$$)[N] f; ( int (**f [N])(char); ) (((int(char))$)[N])$ f; ( int (*(*f )[N])(char); ) $が入ってないものは>>199と 全く同じになるので省略しました。
- 234 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 02:27:17 ]
- >>232の定義に
・Tが型ならば、T[ ]は型である。 をつけ加えると、>>180の >int (*((*func(void))[]))(void) これも232の形式で書けて ((((int(void))$)[ ])$)(void) func; となります。 また、T[N]$ と書いたとき、これを(T[N])$と読むことは出来ても T([N]$)と読むことは出来ないし、T$$とかT$[N]なども同様のことが 言えます。よって、ある程度カッコを省略できて、結局、 次のように表記できます。 ((int(void))$[ ]$)(void) func;
|

|