简单的C语言 的问题

来源:百度知道 编辑:UC知道 时间:2024/07/06 15:27:16
void prt(int a,int b,int c)
{printf("\na=%d\tb=%d\tc=%d\n",a,b,c);
}
int main(void)
{int i=0;
prt(++i,++i,++i);

retunrn (0);
}为什么输出结果是a=3 b=2 c=1,而不是a=1 b=2 c=3

这与c语言的编译过程有关,在编译过程中函数的参数的传递是一个进栈与出栈的问题,堆栈是先进先出。因为在printf("\na=%d\tb=%d\tc=%d\n",a,b,c);一句中先要输出a的值,所以要最后入栈,反之c的值最后输出,所以要最先入栈,即得到先算c的值再算b的值,最后算a 的值,而造成,a=3 b=2 c=1这样的结果,

C语言中参数传递时,入栈顺序是从右到左。这样是为了在printf之类的函数调用参数时,提前统计好参数数目是否对应,而从左向右则需要到最后一个才能判断。

prt(++i,++i,++i);
里面的参数是从右往左的顺序来的。
例如:
int a=8;
prt(++a,++a,a+=6);
输出是:16 15 14

这是编译系统的问题,你的编译系统是从右向左计算prt(++i,++i,++i);的!

编译系统的问题,各个编译系统不一样的!