1

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

有一个例子:

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

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

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

4

3 回答 3

7

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

你应该首先使用

float a[10]
于 2012-07-04T20:09:15.563 回答
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 (其余的只是被切断)

于 2012-07-04T20:18:21.370 回答
2

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

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

a是一个int数组,所以那里的数字是整数而不是浮点数。
选择索引 4 是因为C++ 运算符优先级

于 2012-07-04T20:11:20.110 回答