僕の理解も相当間違ってたみたいですね
「 *s 」と「 s[] 」の違い - IT戦記
書いてよかった><
書かぬは一生の恥になるところでしたね!
だいたい分かった気がする
違ってたらきっと誰かが突っ込んでくれる><
配列
ポインタはキモくなくて、配列がキモいってことが分かった。
- あまちゃん: 配列は式の中に置くと「一部の例外」をのぞいてその場で「先頭要素のポインタ」の値として扱われるよ
- ひとちゃん: 式じゃないところってどこ><
- あまちゃん: 宣言ぐらいじゃね
- ひとちゃん: でも宣言の中で値って使う?
- あまちゃん: 基本どこでも先頭要素のポインタを指すってことでいいのかもね。(知らない
- ひとちゃん: へー
- あまちゃん: 結局「一部の例外」が大事なんじゃね?
- ひとちゃん: 例外って何よ
- あまちゃん: sizeof されるとき、 & 演算子でアドレスを取られるとき
- ひとちゃん: へー。例外ねー
sizeof されたとき
& 演算子
- あまちゃん: 僕は配列に対して & 演算するまで、本当に配列型というものが存在するとは信じられなかったんだ
- あまちゃん: どうせ、お前ポインタなんだろ?って感じで
- あまちゃん: でも、これをやってみてすべてが納得だったよ。配列型って存在するんだー!ってなったよ
- ひとちゃん: ごくり
- あまちゃん: int a[10]; があるとき &a ってどうなる?
- ひとちゃん: どうなるんだろう。 a と同じ値になりそうだな
- あまちゃん: 値は同じになるけど、型は違う。 a の型は char* だけど &a の型は char(*)[10] という型になる。
- あまちゃん: 式の中の a は先頭要素のポインタであって、配列のポインタではない
- ひとちゃん: ん?
- あまちゃん: 型が違うから &a + 1 と a + 1 は全然違うよね。配列という集積型があるからこそ、こういうことがおこる。
- あまちゃん: もちろん、 int (*b)[10] として、最初から配列のポインタを作ることも可能だ。
- ひとちゃん:うーん