孙燕姿演唱会门票多少钱:C语言 实参数求值问题

来源:百度文库 编辑:高校问答 时间:2024/04/29 19:18:11
//实参数求值的顺序。这个小程序可以证明p=f(i,++i)中是从右向左求实参的值的????
#include"stdio.h"
void main()
{
int f(int a,int b);
int i=2,p;
p=f(i,++i);
printf("%d\n",p);
}

int f(int a,int b)
{
int c;
if(a>b) c=1;
else if(a==b) c=0;
else c=-1;
return(c);
}

/*当p=f(i,i++);结果为0,从此推测实参数的值是从右往左求;
可是当p=f(i,++i),结果还是0,这样推测是从左往右求,不是矛盾了吗!本人用的是Microsoft Visual C++ 6.0编译的
希望大家帮忙看看,能不能解决。

计算表达式,和把值传入是两个概念。

表达式的值是从左向右的,但是是把所有的表达式都计算完了以后才传值的。
当 f(i, i++) 时,因为 ++ 是后缀运算,所以程序先把两个 i 值传入函数,然后 i 再自增就和 f 函数没有什么关系了。
当 f(i, ++i) 时,因为 ++ 是前缀运算,所以程序先计算自增,虽然在计算左边参数的 i 时,i 的值还没有增加,但是因为这个时候并不传值,等到全部计算完后,再传值的时候,i 已经被第二参数中的自增运算加了一了。

因为两个参数传的都是 i 值,所以它们永远都传入的是同样的值,因为 i 在同一刻的值永远是一样的。

是这样的,p=f(i,i++);在main()函数中调用时,形参a,b获得的是2,2,a,b相等,故输出0.

              而p=f(i,++i);在main()函数调用时,    a ,b获得的是3,3 , a,b相等,故还是输出0.

这个 是一个值传递相当与copy ,要用指针才行啊,你自己想想 p默认的还是 zero