K.Maebashi's BBS

ご自由に書き込んでください。雑談も可。
テスト書き込みの類はテスト用掲示板にどうぞ

[日付順表示] [日付順インデックス] [スレッド順インデックス]


新規投稿 | 開設者ホームページへ戻る | ヘルプ


[2072] Re:【C言語ポインタ完全制覇】ポインタはどれだけ進む?
返信


投稿者:knwifuru
2017/12/20 08:08:58

Link:
>>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する先では?)

…というわけで、『ポインタ「の指し示すアドレス」が〇〇だけ進む』などという表現の方が、くどい文章になるけれど、誤解する僕のようなバカチンは減るのでは?と申したわけです。

細かくてすみません…
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[ より新しい投稿] [ より古い投稿]