dポイントプレゼントキャンペーン実施中!

C言語で配列をあつかう場合、ポインタをつかうか、配列の添え字を使って処理するか迷うのですが、どちらが良いのでしょうか?
処理速度ではどちらが上でしょうか?

A 回答 (3件)

いきなり


a[x]
と書いた場合は、他の回答のように
*(a+x)
と同じ処理速度です。

しかし
for(i=0;i<1000;) {
ホゲホゲ=a[i++];
}

型 *p = a;
for(i=0;i<1000;) {
ホゲホゲ=*p++;
}
では、処理速度に差が出ます。

前者では「毎回、aとiを加算して実効アドレス値を求め、値の取り出し後、iをインクリメントする」と言う処理が行われます。

しかし、後者では「毎回のアドレスの計算はせず、pから直接に実効アドレスをロードして使い、値の取り出し後、pに一定値を加算する」と言う処理が行われます。

「どちらが早いか?」は、コンパイラごと、実行するCPUごとに違うので、どちらと明言する事は出来ませんが、明らかに言えるのは「前者と後者では、異なる機械語コードが生成される筈だから、速度に差が出る筈」と言う事。

ま、どう考えても「毎回、加算を行ってアドレス値を作る」のと「アドレス値を持って来るだけ」なら、後者の方が早いでしょう(断言はしませんが)

そう言った訳で「連続したアドレスから順番に中身を取り出す」とか「連続したアドレスに順番に中身を詰め込む」なら、ポインタを用いるべきでしょう。
    • good
    • 0
この回答へのお礼

そのはずですよね。納得しました。回答ありがとうございました。

お礼日時:2009/01/27 00:48

#1さんのおっしゃるとおりです。


a[x]という表記は*(a+x)の「糖衣構文(syntax sugar)」です。ググってみてください。
どちらがよい・悪いということはありません。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

お礼日時:2009/01/27 00:47

a[x] という形か、*(a+x) という形かと言うことですよね?


そのデータが「配列」なのなら、a[x] がわかりやすいでしょうね。「aという配列のx番目の要素」というのがストレートに表現できるので。

>処理速度ではどちらが上でしょうか?

同じです。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

お礼日時:2009/01/27 00:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!