c ++中的代码是什么意思?

时间:2013-12-26 06:56:48

标签: c++ naming-conventions

我不明白变量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;

3 个答案:

答案 0 :(得分:7)

k显示值为1,因为您正在访问超出范围的数组a。

j = 4j+15时,您正试图访问超出范围的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]生成布尔结果(falsetrue)。在int上下文中,truefalse分别转换为10

所以,这大致相当于:

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最终是一个元素的次数,如果大于以下元素。