K.Maebashi's BBS

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

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


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


[2252] Re:ポインタ完全制覇(第2版) p75 *pのループ中の計算
返信


投稿者:(ぱ)こと管理人
2021/06/12 20:36:48

Link:
はじめまして。読んでいただきありがとうございます。

>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]は、何度も登場する」と書いてあるのはそういう意図です。

これで回答になっていますでしょうか?

[ この投稿を含むスレッドを表示] [ この投稿を削除]



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