有人可以解释这行c ++吗?

时间:2013-12-23 11:19:19

标签: c++

cout << results[rand()%(sizeof(results)/sizeof(results[0]))] << endl;

结果是一个整数数组:1,2,3,4,5。
有人可以解释一下吗?

3 个答案:

答案 0 :(得分:1)

这将以随机顺序打印arrayentry的值。

它创建一个随机值,并使用模运算符%将其限制为arraysize的索引。

rand()创建0 to RAND_MAX

范围内的随机整数值

sizeof(results)/sizeof(results[0])是您在代码中先前定义的数组的大小,即int results[5]

模运算符%组合了这两个tww值,并确保结果不大于数组的大小(0-4)。

答案 1 :(得分:0)

rand()会返回一个随机数。

你想要一个大小为5的数组中的随机数。所以你使用modulo运算符来确保你不超过4(0,1,2,3或4)。 / p>

sizeof(results)返回数组的总大小(以字节为单位)。 sizeof(results[0])是该数组中元素的大小。例如,如果sizeof(results[0])为8,则sizeof(results)为40,因此结果为40/8,即5,即数组的大小。

答案 2 :(得分:0)

看起来我的previous answer有点简洁......

cout << results[rand()%(sizeof(results)/sizeof(results[0]))] << endl;

可以细分为

int num_elems = sizeof(results)/sizeof(results[0]);
int randomIndex = rand() % num_elems;
int randomValue = results[randomIndex];
cout << randomValue << endl;

稍微详细一点:

  • sizeof(results)/sizeof(results[0])计算数组results中的元素数。 (请注意,这仅在您有权访问数组定义时才有效 - 您不能将其与指向数组的指针一起使用。)
  • rand() % num_elems计算[0..num_elems-1]范围内的随机数;这是results数组的范围。
  • results[randomIndex]会返回results
  • 中随机选择的单个元素