请问这段代码的输出是怎么来的呀


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

运行结果

img

可以确定的是,调用函数时,参数是从右向左压入栈中的,其中的运算,也是从右端开始的。这大概能解释这里大家得到的结果虽然不同,但都是左端的数稍大。
至于为什么大家能得到不同的答案,就与具体编译器在压栈时如何去处理 先++ 和后++ 以及该运算对应位置是否存储改运算结果有关了。

我为啥觉得这个答案有问题呢,不应该是4,5,5吗……

这样连加 或 连减 的表达式,不同的编译器会给出不同的结果,建议不用去分析,略过,实际的代码里,不可能这么写和用。我试了下,得到:8,4,2 .

img

printf()是C语言标准库函数,用于将格式化后的字符串输出到标准输出。标准输出,即标准输出文件,对应终端的屏幕。printf()申明于头文件stdio.h。

函数原型:

int printf ( const char * format, ... )。

返回值:

正确返回输出的字符总数,错误返回负值,与此同时,输入输出流错误标志将被置值,可由指示器ferror来检查输入输出流的错误标志。

%d的意思是输出整数