Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4523301
  • 博文数量: 1148
  • 博客积分: 25453
  • 博客等级: 上将
  • 技术积分: 11949
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-06 21:14
文章分类

全部博文(1148)

文章存档

2012年(15)

2011年(1078)

2010年(58)

分类: C/C++

2011-11-28 19:06:23

2个链接网址阐述了问题:

我记得好像看到某个文章里面说C语言里面的函数参数压栈顺序与求值顺序是两回事。 压栈顺序是从右到左,而求值顺序则是undefined的,由编译器实现决定,例如
  1. int g();
  2. int h();
  3. int f(int c, int b);
  4. ...
  5. f(g(), h());         --(1)
  6. ...
复制代码

(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



阅读(2186) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~