我执行了以下代码:
int a[] = {5,1,15,20,25};
int i,j,m;
i = ++a[1];
j = a[1]++;
m = a[i++];
printf("%d %d %d",i,j,m);
我输出如下: -
3 2 15
我不理解的部分是我如何将i
的价值视为 3
应该 2 对吧?
或者它与C编译器从右到左评估printf()
语句有关吗?
答案 0 :(得分:5)
m = a[i++]
行第二次递增i
,从2增加到3。
答案 1 :(得分:1)
什么是a[1]
?它是1.什么是++a[1]
?它是2. i
现在是2,到目前为止一直很好。
但是当你计算m
时,你有a[i++];
,i
现在是3(请注意,m
将是a[2]
- i
评估后增加。
答案 2 :(得分:0)
i = ++a[1];
预增量运算符。 a[1]
变为2,然后i
变为2;
j = a[1]++;
post-incement运营商。 j
变为2,然后a[1]
变为3。
m = a[i++];
增量后运算符。 m
变为a[2]
= 15,然后i
变为3。