C语言形参与实参的复习

形参与实参:1、个数一致;2、外置关系对应;3、类型一致;4、值传递;

形参与实参是单向传递,对形参变量的任何修改,绝对不会更改实参表达式原本的值!

1、形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量。
2、实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值。
3、实参和形参在数量上,类型上、顺序上应严格一致,否则就会发生类型不匹配的错误。
4、在一般传值调用的机制中只能把实参传送给形参,而不能把形参的值反向地传送给实参。因此在函数调用过程中,形参值发生改变,而实参中的值不会变化。而在指针调用的机制当中是将实参的地址传递给了形参,所以任何发生在形参上的改变实际上也发生在实参变量上。
实现一个“交换两个整型变量的值”的函数:

一:先看这种方法。

void swap(int a, int b) {
	int temp;
	
	temp = a;
	a = b;
	b = temp;	
}
swap(one, another);

可见,这样处理并不能成功的交换两个整型变量。从内存的角度分析可知:

交换前:


交换后:


这样形参与实参之间进行的是“值传递”,即把one的值5复制一份,传递给a;把another的值2复制一份,传递给b。在swap()函数中,只是one和another的复制本a和b在进行交换,对one和another根本没有任何影响,所以结果也就显示,没有交换成功。

二:正确的交换方法;

void swap(int *a, int *b) {
	int temp;
	
	temp = *a;
	*a = *b;
	*b = temp;	
}
swap(&one, &another);


扫描二维码关注公众号,回复: 2444570 查看本文章



        temp = *a;
*a = *b;

*b = temp;    这样做的目的是:将a所指向的空间的值赋值给temp,将b所指向的空间的值赋值给a所指向的空间,将temp的值赋值给b所指向的空间,形参a接受的是one的地址,b接受的是another的地址。所以,这样用传地址的方式,才能真正的实现两个整型变量的交换。

三:交换两个变量的值的其他方法。

1:用加减或乘除运算来交换

2:用异或交换

猜你喜欢

转载自blog.csdn.net/weixin_38214171/article/details/79938694