c语言问题2道 说说过程

来源:百度知道 编辑:UC知道 时间:2024/05/13 14:19:12
以下程序输出的结果

int a,b;
void fun()
{
a=100;
b=200;
}
main()
{
int a=5,b=7;
fun();
printf("%d%d\n",a,b);
}

求结果

void f(int v,int w)
{
int t;
t=v,v=w,w=t;
}
main()
{
int x=1,y=3,z=2;
if(x>y) f(x,y);
else if (y>z) f(y,z);
else f(x,z);
printf("%d,%d,%d\n",x,y,z);
}
答案我有,不用你说 不明白那个怎么复直的 ,为什么底下的住函数没起作用

这两个题都在于一个问题——局部变量和全局变量。

首先要清楚局部变量的作用域在申明该变量的函数内部,有别于全局变量,而不同的函数内可以申明有相同标识符的变量!
从内存方面来说,即使不同函数内有相同标识符的变量,系统为其分配的内存单元也不同,即其拥有不同的地址,所以使得不同函数内的有相同标识符的变量所对应的值可能不同。
在写程序时,这是要特别注意的。

比如,第一个例子,虽然fan函数内对a,b进行了赋值操作,但fan函数内的a,b与main函数内的a,b分别对应的内存单元的地址不同,所以fan函数内的赋值操作与main函数无关,而a,b是全局变量情况就有所不同了。

第二个例子,是这个问题的又一种情况。进行值传递方式的被调用函数的形式参数,是被调函数的局部变量,在该函数被调用后系统才为该变量开辟内存空间并在被调用函数执行完毕后释放形式参数的内存空间,因此,在被调函数内对进行值传递传入的数据所做的操作一般是没用的,除非最后用return语句进行值的返回,但只能返回一个结果。
(第二个例子中f函数虽然是对传入的值进行互换,但达不到预期效果)

而另一种情况就是地址传递。对传入的地址相对应的内存单元内的数据直接进行操作可以改变a,b值,可以对x,y,z进行局部大小互换。
所以这两道题没有对a,b或x,y,z进行任何操作,只是原样输出而已。
答案也就如zf2187所说的了。

5 7
Press any key to continue!嘿嘿

1 3 2
Press any key to continue!嘿嘿

1) fun()函数 给外部变量赋值
主函数中内部变量不变,输出内部变量的值: 57

2) f()函数 交换两形式参数 v,w的值
主函数不论怎样调用f()函数,是单向值传递,
不改变变量x,y,z的值.输出: 1,3,2

第一个程序的运算规则
先是定义一个函数,如果您函数没看到的话 先别看这里
把形式参数返回给MAIN,由于他FUN()函数里没有实参,所以打印出来的