[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends] Re: [jfriends] Re:ポインターと参照




>「「int型の幅を持つ」領域のアドレスであることが保証されたアドレス値」とい
>うのは、頭で理解していたのですが、いざ
>step1 int 型 ポインタにはアドレスが入っている
>step2 ポインタをインクリメントする
>step3 ポインタが int 分だけ進む
>step4 でも、 int 型 ポインタにはアドレスしか入っていない
>なら、何故 int 分だけ進めるのか、int 分であるという情報を何処から仕入れ
>ているのか?

これは、データが入っているアドレスの側には関係無く決まっています。

int *p; という式で「int 型へのポインター変数だぜ」と宣言された p は
int の幅 (バイト長) でインクリメントされますし、

long *p1; という式で「long 型へのポインター変数だぜ」と宣言された p1 は
long の幅でインクリメントされます。

ポインター変数は、ドラえもんの「取り寄せバッグ」みたいなもので、
メモリー空間上のどこにあるデータでも取り出せます。

ただし取り出せるものの型は、そのポインター変数の宣言のときに決まってしまいます。
int *p; で宣言されれば int 型のデータ、long *p1; で宣言されれば long 型のデータです。

>このアドレスからこのアドレスに入っているポインタは、全部 int とか決められ
>ているのだろうか?

これは決まってないです。あくまでも "取り寄せバッグ側" の都合だけです。

>んー、そこらへんが理解できない。

私は前掲書 柴田望洋『秘伝C言語問答 ポインター編』の演習をやったことが
最も理解の助けになりました。
この本は説明が明快で面白いと思います。例えば、
「C には関数引数の参照渡しは存在しない」と言い切っているし。
------------------------------------------------------------------
遠藤靖之 (えんどう やすゆき) <yasuyuki@xxxxxxxxxx>
http://www.freepage.total.co.jp/jfriends/ (Java互助会ホームページ)
株式会社タイムインターメディア 情報通信サービス部 TEL 03-5362-9009
〒162-0065 新宿区住吉町3-11 新宿スパイアビル      FAX 03-5362-9008