虽然printf()函数是从右往左计算表达式的,但输出时是从左往右输出的。
示例:
#include <stdio.h>
int main()
{
int i = 8, j = 8;
printf("%d, %d, %d\n", i++, i++, i++);
printf("%d\n\n", i);
printf("%d, %d, %d\n", ++j, ++j, ++j);
printf("%d\n\n", j);
return 0;
}
运行结果:
printf("%d\n", i++);
上面代码是先打印,然后i在自增。
但为什么 printf("%d, %d, %d\n", ++j, ++j, ++j);
输出的结果不是11,10,9呢?
我记得有一本书上写着,但实在找不到在哪本书看的了,找到了,再加上。i++,i--,后增,后减返回的是一个复制的数,++i,--i,前增,前减返回的是一个引用,就是原来那个数的别名。
所以 printf("%d, %d, %d\n", i++, i++, i++);
中第二个i++之后,不会对printf中第三数产生影响。
而 printf("%d, %d, %d\n", ++j, ++j, ++j);
由于返回的是引用,printf中计算第二个++j时,也会修改printf已经计算出第三个数,计算第一个++j时,也同样会修改printf已经计算出得第二个数和第三个数,因为引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。所以会出现上面输出一样的结果。
由于本人水平有限,如果解释有误,欢迎指出,非常感谢!