使用增量运算符后混淆输出

时间:2014-04-20 04:48:20

标签: c post-increment pre-increment

#include <stdio.h>

main()
{   
    int a[5] = {5,1,15,20,25};
    int i,j,m;
    i = ++a[1];
    j = a[1]++;
    m = a[i++];
    printf("%d %d %d\n",i,j,m);
}

好的,现在程序编译并运行正常。但我得到的输出是3 2 15,即i = 3,j = 2,m = 15.我不明白为什么i的值变为3作为[1],即'1',当递增时必须变为2这是一种“追踪输出”类型的问题。我正在使用gcc。

4 个答案:

答案 0 :(得分:3)

我已经在语句执行之前和之后编写了变量的值 所有的副作用都发生了。

int a[5] = {5, 1, 15, 20, 25};
int i, j, m;

// before : i is indeterminate, a[1] = 1
i = ++a[1];  
// after: i = 2, a[1] = 2

// before: j indeterminate, a[1] = 2
j = a[1]++;  
// after: j = 2, a[1] = 3

// before: m indeterminate, i = 2
m = a[i++];  
// after: m = a[2] = 15, i = 3

因此,最终值为

i = 3
j = 2
m = 15

答案 1 :(得分:2)

执行以下行时,

m = a[i++];

i再次递增,使其值3

答案 2 :(得分:0)

在第7行,你有

i = ++a[1];

此增加a[1](至2),然后将其分配给i

然后在第9行,你有

m = a[i++];

此增加i(至3),然后将a[3](15)分配给m。

答案 3 :(得分:0)

i = 3因为

i = ++a[1] => i = ++1 and so i,a[1] are both 2
m = a[i++] => i = 3 because of i++