C语言中的printf函数的输入输出问题

这个问题是个很基础,但是我一直不知道的问题,是同学问了之后才知道的,长知识了。

这里要注意的是,printf函数是从右向左计算,从左向右输出。

距离如下:

#include <stdio.h>
main()
{
    int i=8;
    printf%d, %d, %d, %d
",i,--i,i,i--);
 }

此程序输出结果为:7, 7, 8, 8。原因是,printf()函数中,i++,i-- 时,i的值是在printf()函数之后才会被刷新,所以在printf()函数中,i++,i-- 对i的值暂时不产生影响,而++i、--i会有影响。

实际这里是涉及到printf的运行规则问题,是先入栈再出栈,然后再输出。具体如下。

对于printf函数中的参数,按照入栈顺序进入栈堆,然后先入栈者到栈底,后入栈者到栈顶,完成后,开始计算,由栈顶开始计算,先出栈者为printf函数中的右侧参数,计算完后接着出栈,然后计算下面的元素,这样,printf函数中的第一个元素就成为最后一个计算的元素,然后再按照由右向左的顺序将计算结果输出,所以上述例子的结果如是。

以此记录,以供学习!

原文地址:https://www.cnblogs.com/Pillar/p/4328984.html