1

次の 2 つのコードの結果が異なるのはなぜですか? 最初のものはゼロを出力しますが、2番目のものは期待どおりにランダムカウントを出力します。gcc 4.6.3 を使用

  8 int foo(){
  9   return rand() % 2;
 10 }
 11 
 12 int main()
 13 {
 14   int ar[2] = {0};              
 15   for (int i = 0; i < 20; i++)  {
 16   //  int tmp  = foo();
 17   //  ar[tmp]++;
 18     ar[foo()];
 19   }
 20 
 21   for (int i = 0; i < 2; i++) 
 22     cout << i << " : " << ar[i] << endl;
 23 }   

~
~

 8 int foo(){
 9   return rand() % 2;
 10 }
 11 
 12 int main()
 13 {
 14   int ar[2] = {0};              
 15   for (int i = 0; i < 20; i++)  {
 16     int tmp  = foo();
 17     ar[tmp]++;
 18     // ar[foo()];
 19   }
 20 
 21   for (int i = 0; i < 2; i++) 
 22     cout << i << " : " << ar[i] << endl;
 23 }   
4

1 に答える 1

3

実際には配列の値をインクリメントしないため:

ar[foo()]++;
//        ^
// You forgot this

これは、すべての要素がそのまま残され、出力として 0 が得られることを意味します。

于 2013-02-16T20:09:51.777 に答える