#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。
答案 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++