求教两个简单的C语言问题

2020-01-30 13:40发布

int main(void)
{
        int i=1;
        printf("%d,%d,%d",i,++i,i);
        return 0;
}
为什么结果是2,2,1?

int main(void)
{
        int i=1,j=2;
        printf("%d,%d,%d,%d",i,i++,i+=j,++j);
        return 0;
}
为什么结果是4,4,4,3?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
23条回答
monkerman
2020-02-01 11:42
小德GD 发表于 2013-4-26 00:46
但用VC6.0测确实是4,4,4,3
printf("%d,%d,%d,%d",i,i++,i+=j,++j);

唉......VC 的结果既然是这样, 我就给解释下吧.
首先从右往左:
++j 后 j 变成了 3, 注意前加操作是先自增后赋值.
i += j 后 i 变成了 1 + 3 = 4;
i++ 时, 由于后加操作是先赋值后自增, 所以, i 还是 4.
i, 当然也是 4, 因为 , 号不是序列点.

如果你用 GCC 的话, 结果会不一样, 他的前加后加操作有自己的理解和规定(不同版本可能也不一样).
            例如++j, i++都是在 i += j; 之前完成, 而且产生副作用. 这时 i+= j; 后 i 的值是 5. 第一个 i 也是 5.

如果你用 Borland-C++  结果可能又不一样. 别纠结了.

一周热门 更多>