[2336] Re:ポインタ完全制覇(第2版) p75 *pのループ中の計算
投稿者:Okamoto
2023/07/06 21:57:11
学生時代に逃げ出したポインタへ改めて向き合おうと思い、ポインタ完全制覇を読ませていただいております。
読み進める中で、こちらの投稿と同じところでつまずいてしまったので質問させていただきます。
*pという記法の場合、p+1要素のサイズという足し算が各繰り返しごとに行われていると解釈したのですが、掛け算はどの段階で行われているのでしょうか。
ご回答よろしくお願いします。
>はじめまして。読んでいただきありがとうございます。
>
>>array[i]は、ループ中に出現するたびごとに「array + (i * 1要素のサイズ)」に相当する
>>アドレス計算を行うというのは理解できますが、*pでも「p + (p++ごとに1要素のサイズ)」
>>に相当するアドレス計算を行っているように思えます。「掛け算と足し算はループの終わり
>>の1回だけ」という意味をご教示いただけるとありがたいです。
>
>「ループの終わりの1回だけ」というのは、たとえばループが100回回ったとして、
>各繰り返しの最後に1回、という意味です。つまり、100回ループが回れば、
>「p + 1要素のサイズ」という計算は100回は行います。
>ただし、ループの中に、array[i]が5回出てくるとすれば、最適化をろくにやらない
>コンパイラなら、100回ループが回った時に「array + (i * 1要素のサイズ)」という計算は
>500回行われます。それが100回で済むなら、*pの方が高速になるでしょう。
>コメントで「array[i]は、何度も登場する」と書いてあるのはそういう意図です。
>
>これで回答になっていますでしょうか?
>
>