2个链接网址阐述了问题:
我记得好像看到某个文章里面说C语言里面的函数参数压栈顺序与求值顺序是两回事。 压栈顺序是从右到左,而求值顺序则是undefined的,由编译器实现决定,例如
- int g();
- int h();
- int f(int c, int b);
- ...
- f(g(), h()); --(1)
- ...
复制代码 (1)处f函数调用,先计算顺序g,还是先计算h这个由编译器决定。而参数的压栈则是固定的由右到左,现将h的结果压栈,然后g的结果压栈。 |
------------------------------------------------------------
int func(int x,int y)
{
printf(" x:%d y:%d",x,y);
}
int main()
{
int x = 2;
func(x++,x); /*1*/
x=2;
func(x,x++); /*2*/
}
以上代码在测试时发现对于调用1来说打印的x=2,y=3;对于调用2来说x=3,y=2
阅读(2178) | 评论(0) | 转发(0) |