C的形参和实参的关系

来源:互联网 发布:mac微信语音导出软件 编辑:程序博客网 时间:2024/05/01 20:59

形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量。

在一般传值调用的机制中只能把实参传送给形参,而不能把形参的值反向地传送给实参。因此在函数调用过程中,形参值发生改变,而实参中的值不会变化。

而在引用调用的机制当中是将实参引用的地址传递给了形参,所以任何发生在形参上的改变实际上也发生在实参变量上。要想改变函数外部定义的变量,必须将此变量的地址作为参数传递给参数,然后在函数内修改这个地址内的数据的值,这样的修改才有效.

举下面题目为例子
void fun(int x, int y)
{
int temp = 0;
if(x < y)
{
temp = x ;
x = y ;
y = temp;
}
}
main()
{
int a = 4, b = 3, c = 5;
fun(a, b);
fun(a,c);
fun(b,c);
printf(“%d, %d, %d”, a, b, c);
}
A、3, 4, 5
B、5, 3, 4
C、4, 3, 5
D、5, 4, 3

========================================
答案是C

一看题目,就一步一步计算,但最后a, b, c的值都没变,因为它们是实参,要想改变实参的值,必须把实参的地址传递给形参,这样才能改变实参的值.

总结如下
1、直接用变量传参一般是不能传递的。因为变量在传递中是两个等值的不同变量,两者互不影响。
2、如果是指针形参p,实参q,而且在被调函数中是对*p做的修改,那这时候这种修改可以传递。因为这时候是对p q指向的内存的直接修改,这种修改可以保存,从而传递出来。
3、对数组形参做的修改也可以传递。数组名是一个常指针。

1 0
原创粉丝点击