以下代码输出背后的逻辑是什么?

时间:2014-03-12 07:39:15

标签: c

我执行了以下代码:

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()语句有关吗?

3 个答案:

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