求教两个简单的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?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
22条回答
damy2008
1楼-- · 2020-01-30 14:33
百度到一些资料。不是是否合用
一是:printf函数中的计算是从右向左进行的。
二是:我们在写代码时,应该尽量避免类似下面的无确定意义的表达式出现,因为很有可能不同的编译器,会采用不同的理解方式。
qwe2231695
2楼-- · 2020-01-30 16:51
从右到左执行。很简单的。
jswd0810
3楼-- · 2020-01-30 22:12
 精彩回答 2  元偷偷看……
绿茶山人
4楼-- · 2020-01-30 22:58
很多人看代码都讨厌这种i+++++,逻辑不清晰,不要用分析这类问题来显酷。搜一下C语言序列点,副作用。
caicai2317
5楼-- · 2020-01-31 02:23
是右到左没错,但是想不明白为什么第二个函数的第一个i是4而不是5
benqme
6楼-- · 2020-01-31 03:42
是右到左,第二个理解应该编译优先权不一样

一周热门 更多>