[2337] Re:ポインタ完全制覇(第2版) p75 *pのループ中の計算
投稿者:(ぱ)こと管理人
2023/07/08 16:06:07
はじめまして。
>学生時代に逃げ出したポインタへ改めて向き合おうと思い、ポインタ完全制覇を読ませていただいております。
>読み進める中で、こちらの投稿と同じところでつまずいてしまったので質問させていただきます。
>*pという記法の場合、p+1要素のサイズという足し算が各繰り返しごとに行われていると解釈したのですが、
>掛け算はどの段階で行われているのでしょうか。
まず、array[i]の記法の場合、array[i]を使うごとに「array + (i * 1要素のサイズ)」に
相当するアドレス計算を行う必要があります。
*pの記法の場合、ループの1回のくり返しの中ではpは動かないので、上記のような
アドレス計算を何度も行う必要はない(だから最適化をしないコンパイラなら速くなる)、
というのが該当の記述の趣旨だったのですが、
p.75の該当の記述は以下のようになっていて、
「*pがループの中に何度出現しても、掛け算と足し算はループの終わりの
1回だけで済みます。」
*pの記法の場合、各ループの末で行うのはp++であって、毎回ひとつずつ進めるのであれば、
確かに掛け算は不要です。
・array[i]記法では、ループ内にarray[i]が何度も出てきたら、その数だけ掛け算と足し算を行う。
・*p記法では、*pが何度出てきても、そういう計算は1回でよい。
ということを言いたかったのですが、「そういう計算」の中身が違いますね。
本の記述が誤りだと思います。
22年以上前の初版本からこの記述はあるのですが、この誤りは見つかっていませんでした。
ご指摘ありがとうございました。正誤表に入れさせていただきます。