c ++数组索引计算问题

时间:2012-07-04 20:07:16

标签: c++

对不起这个简单的问题,但我无法解决......

有一个例子:

int a[10] = {6, 7.8, 8.0, -6, -5.7, 5, 5.7};

std::cout << a[6 % 8 / 4 + 21 % 9];

作为回应,我得到 -5 ,但我不明白为什么。

3 个答案:

答案 0 :(得分:7)

因为你的数组是一个整数数组。

你应该先使用

float a[10]

答案 1 :(得分:3)

http://en.cppreference.com/w/cpp/language/operator_precedence 在这种情况下,运营商优先考虑:6%8/4 + 21%9 =(((6%8)/ 4)+(21%9))=(6/4)+(3)= 4

a[0]=6,
a[1]=(int)7.8 = 7, (correct me if i'm wrong)
a[2] = (int)8.0 = 8,
a[3] = -6,
a[4] = (int)-5.7 = -5,
a[5] = 5,
a[6] = (int)5.7 = 5

因此索引为4的元素为-5.7,转换为整数给出-5(其余的只是截断)

答案 2 :(得分:2)

6 % 8 / 4 => (6%8) / 4 => 6 / 4 => (int)1.5 => 1(6/4是int - num和denom是整数)
21 % 9 => 3
1 + 3 == 4

a[4] == (int)(-5.7) == 5

a是一个int数组,所以数字是int而不是浮点数。
由于C++ operator precedence

,选择了索引4