求教两个简单的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-02 01:11
本帖最后由 monkerman 于 2013-4-26 13:51 编辑
小德GD 发表于 2013-4-26 12:56
非常谢谢你用心的回答。想再麻烦问下“i, 当然也是 4, 因为 , 号不是序列点.”这句话怎么理解? ...


不客气. 我也只是恰好知道.
第一个 i 的值其实是第二个 i++ 的 i 值, 因为 VC 对后加操作的自增是在语句结束之后, 也就是分号. 所以还是 4, 逗号在这里并不被当作是序列点.
剩下的上面已经解释了. 你可以改一下, 然后再看结果. 多来几次可能就明白了. 强烈建议比看反汇编, 看到 incl 指令就明白了.
例如:
  1. printf("%d, %d, %d, %d", i++, i++, i += j++, ++j); // 看一下结果, 测试时可以这么写, 正式时千万别这么写, 会被骂的.
复制代码

一周热门 更多>