c ++传递函数作为数组索引不起作用。

时间:2013-02-16 20:07:32

标签: c++ arrays random indexing

为什么以下两个代码会产生不同的结果? 第一个打印零,而第二个打印随机计数按预期。 使用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 }   

1 个答案:

答案 0 :(得分:3)

因为实际上没有增加数组中的值:

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

这意味着所有元素都保持不变,输出为0。