2011-12-24 17 views
2

私は以下のペーストしたプログラムで、なぜポインタ "p"がforループ内で初期化されたのか疑問に思っていましたか?私はforループの条件を次のように読みとることに慣れています。この値に達するまでこれほど多くを増やしてください。したがって、終了条件を決定せず、そこでの各反復中に増分されていない別の変数を持つことは奇妙に思えます。forループ内でこの重要でない変数が初期化されるのはなぜですか?

私はちょうどp = &を[0]にします。 forループの上に置いて残りの部分を残してください。これは単なる文体的なものなのでしょうか、pをどこで初期化するかによって処理される方法に違いがありますか?一方的な方法が他の方法より優先されていますか?

#include <stdio.h> 
#define PRD(a) printf("%d", (a)) 

int a[]={0, 1, 2, 3, 4}; 

int main() 
{ 
    int i; 
    int* p; 

    for (p=&a[0], i=0; i<=4; i++) PRD(p[i]); 

    return 0; 
} 
+4

誰かがそれをそこに置くことに決めたので、誰ですか? :P – Benjamin

+0

簡単にテストすることができます。ループの外側にp =&a [0]を移動し、出力が変化するかどうかを確認してください。 –

+0

Yah、出力が同じであることがわかります。私は何の違いがあったとしても私が知らなかった利益があるかどうか疑問に思っていただけです。 – bqui56

答えて

2

これは単なるスタイルのようです。私はおそらくpの初期化をforの文の外側に置いていたでしょう。そこにあるすべてのものを詰め込むと、コードを読みにくくなるからです。 (そのforループのパターンは、あなたが通常期待しているものとは異なりますので、経験豊富なプログラマーは、停止し、バックアップし、それが意味をある前にそこにあるものを考えなければならないでしょう)for

ループの外側にpを初期化するのではなく、このようなコードを書くことはパフォーマンスに影響しません。

+0

人間が読むのが簡単なコードを書く方が良いでしょう。コンピュータはどちらの方法も気にしません。 – dreamlax

関連する問題