int f(int a, int b)
{
int c;
if(a>b)
c=1;
else if(a==b)
c=0;
else
c=-1;
}
main()
{
int i=2,p;
p=f(i++,++i);
printf("%d\n",p);
}
请问一下运行结果是什么,思路是什么
求指教
p=f(i++,++i),实际执行就是p=f(3,4);
输出是-1,函数最后要加上return c才行
参数从右向左处理
对于++i,先对i值加1,但不会马上作为参数传递,必须所有参数都处理完才确定i值进行传递
对于i++,先将当前i值作为参数值传递,然后i值再加1
因此运行过程是++i,i值变为3,但右侧参数不传递,然后执行i++,i值3作为参数传递,然后i加1变为4,最终i值为4作为第二个参数传递
同理可测试f(++i,++i)就是f(4,4),f(i++,i++),就是f(3,2),f(++i,i++)就是f(4,2)
运行结果是3
p=f(i++,++i);等价于p=f(3,4);
第一次调用i=2,但不会马上传参,需要遍历两个参数
i++,先对i值加1,所以传入f函数的第一个函数是3
访问第二个参数++i,此时i是3,++i,结果是4,所以传入f函数的第一个函数是4
p=f(i,++i); 等价于 p=f(3,3);
p=f(++i,++i);等价于 p=f(4,4);
p=f(i++,i++);等价于 p=f(3,2);
p=f(i++,i);等价于 p=f(2,3);
p=f(++i,i++)等价于p=f(4,2);
另外f函数并没有return语句,没有返回值,猜测你可能需要返回c,需要加return c才行