C语言 递增问题

来源:百度知道 编辑:UC知道 时间:2024/06/30 23:39:47
#include"stdio.h"
void main()
{
int i=3;
printf("\n%d,%d\n",i++,++i);
}运行结果因为啥是4,4
而如果求i++,i++ 时结果又是3,3

这里有两个注意点:
1.printf的字符串的列表的处理(也就是这里的i++,++i)是右结合的(也就是从右向左处理)
2.printf的输出控制(也就是这里的\n%d,%d\n),是左结合的(也就是从左向右输出)

所以在这里printf("\n%d,%d\n",i++,++i);
先计算++i,由于++在前,所以先进行++处理,再将处理后的值代入,所以将i=4赋给后面一个%d
再计算i++,由于++在后,所以先代入i值(也就是4),再处理++,所以将i=4赋给前面一个%d

所以最后输出4,4

前递增和后递增的去别,前递增(++i)在语句运行前执行,后递增(i++)在语句运行后执行。所以改成i++,i++就在printf运行前多加了i一次。

因为输出语句的运算是从右往左进行
i=3;++i=4;i++=4之后i再自加一次变成5,不过已经没机会再出现了
而输出的形式为从左往右,所以输出为4 4

printf()是从右往左计算的,所以是那个结果了