#C语言#关于函数调用实参顺序的问题?
为什么和我想的不一样前两个是对的,前面两个按照自右向左的赋值顺序,是f(3,2),f(4,4)分析得没问题,后面两个我分析的是f(5,4), f(5,5)。调试后发现是f(5,5),f(5,6),为什么?
#include <stdio.h>
int main(void)
{
int f(int a,int b);
int i=2,z1,z2,z3,z4;
z1=f(i,i++);//实参自右向左执行赋值,即运行为f(3,2),返回1
z2=f(i,++i);//实参自右向左执行赋值,即运行为f(4,4),返回0
z3=f(++i,i);//实参自右向左执行赋值,即运行为f(5,4),返回1
z4=f(i++,i);//实参自右向左执行赋值,即运行为f(5,5),返回0
printf("%d %d %d %d\n",z1,z2,z3,z4);
}
int f(int a,int b)
{
int c;
if(a>b)
{
c=1;
}
else if(a==b)
{
c=0;
}
else
c=-1;
return c;
} 没有意义的研究
再函数实参中进行自增运算,只有脑袋进水的人才会去做 wp231957 发表于 2021-1-12 06:48
没有意义的研究
再函数实参中进行自增运算,只有脑袋进水的人才会去做
业余学习有什么意义不意义的?我是来问为什么,不是问有没有意义好吗?{:10_245:} 不同的编译器有不同的实现 衔尾蛇 发表于 2021-1-12 11:27
不同的编译器有不同的实现
好的,大概了解了一下,在其他编译器上运行会有对i的访问是不确定的的警告,大概也是这个原因
页:
[1]