函数参数为算数表达式,算术表达式的执行顺序探究
.
.
曾经做了这样一道题目:
void foo(int x, int y, int z)
{
printf("%d %d %d\n",x,y,z);
}
void main()
{
int a=10,b=20,c=30;
foo(a+b+c,b=(c*2),c=(c+b));
}
最后的输出结果竟然是
160,100,50
这个结果当然不能理解,本以为应该是60,60,90的。
于是就做了下面的测试:
void foo(int x, int y, int z)
{
printf("%d %d %d\n",x,y,z);
}
void main()
{
int a=10,b=20,c=30;
printf("%d %d %d\n",a+b+c,b=(c*2),c=(c+b)); //160 100 50
printf("%d %d %d\n\n",a,b,c); //10,100,50
a=10,b=20,c=30;
foo(a+b+c,b=(c*2),c=(c+b)); //160 100 50
printf("%d %d %d\n\n",a,b,c); //10,100,50
a=10,b=20,c=30;
foo(a=c*2,b=(a*2+c),c=(b+a+10)); //80,60,40
printf("%d %d %d\n\n",a,b,c); //80,60,40
}
输出截图如下:
经过思考观察,发现应该是当函数的参数中是算数表达式的时候,它的执行顺序应该是从右向左,但是这只是我的猜测,并进行了初步的验证,不管是printf()函数还是自定义的函数foo()结果都是这样的。
到底对不对?上网搜罗了半天也没有人碰到这样类似的情况,只能暂且这样认为。