[2072] Re:【C言語ポインタ完全制覇】ポインタはどれだけ進む?
投稿者:knwifuru
2017/12/20 08:08:58
>>2-3-2ポインタ型派生で(第1版p151、第2版p172)、「くどいようですが繰り返して
>>おきます。ポインタに対して加算を行うと、そのポインタの指す型のサイズだけ、
>>ポインタが進むのでした。」とありますが、ポインタの指す型のサイズだけ進むのは、
>>(通常のポインタの実装では)【アドレス】であって、ポインタが進む大きさは、
>>ポインタに加算した量だけ、ではないでしょうか?
>
>この「ポインタが〇〇だけ進む」という表現は、第2版p.56の
>
>>ポインタって、要するにアドレスのことなんだろ?
>>だったら、1足したら1進むに決まってるじゃないか!
>
>のところから一貫して「バイト数」を指しているつもりです。
(略)
>そして、こういう説明が必要だと思ったからこそ、私はこの本を書いたわけです。
有難うございます。感謝しながら読ませて頂いております。
混乱してきました。あ、勿論、ポインタの指す先がどれだけ進むか?は、理解しているつもりです。
int i, iarray[10];
int *ip;
ip = iarray
で int が 4bytes である場合に、
*(ip+2);
が、iarray の先頭アドレスから 4*2=8bytes を参照していることはわかっているつもりです。
この時、ip はポインタ(型の変数)ですよね? ですから、ip+2、すなわち、ポインタ(型の変数の値)に2加算したポインタ『値』は、あくまで2しか増えていないじゃない!、と僕は思ったわけです。そして、「ポインタが〇〇だけ進む」という表現は、『ポインタ「の値」が〇〇だけ進む』と読めました。その指す先は、勿論、8bytes 進んだ場所ですが… (ipとip+2の差はあくまで2ですが、ip+2がdereferenceする先とipがdereferenceする先の番地の差は、2*sizeof(int)、で、バイト数で考えて意味をもつのは、あくまでdereferenceする先では?)
…というわけで、『ポインタ「の指し示すアドレス」が〇〇だけ進む』などという表現の方が、くどい文章になるけれど、誤解する僕のようなバカチンは減るのでは?と申したわけです。
細かくてすみません…