我不明白变量k上发生了什么。例如,我试图把1,2,3,4,5,但k给我看1。
int a[5];
for (int i = 0; i < 5; i++) {
cin >> a[i];
}
int k = 0;
for(int j = 0; j < 5; j++) {
k += a[j] > a[j+1];
}
cout << k;
答案 0 :(得分:7)
k显示值为1,因为您正在访问超出范围的数组a。
当j = 4
,j+1
为5
时,您正试图访问超出范围的a[5]
。
因此,它错误地显示a[j] > a[j+1]
一个值。这是未定义的行为。
将您的代码更改为:
for(int j = 0; j < 4; j++) {
k += a[j] > a[j+1];
}
如果输入系列为1,2,3,4和5,则k的值为0.
答案 1 :(得分:3)
a[j] > a[j+1]
生成布尔结果(false
或true
)。在int
上下文中,true
和false
分别转换为1
和0
。
所以,这大致相当于:
for (int j=0; j<5; j++)
if (a[j] > a[j+1])
++k;
答案 2 :(得分:0)
循环遍历数组a
,比较a[0] > a[1]
,a[1] > a[2]
,a[2] > a[3]
等。当布尔值添加到整数时,它首先转换为0 (如果为假)或1(如果为真)。因此,k
最终是一个元素的次数,如果大于以下元素。