形参与实参值传递

数据结构与算法 专栏收录该内容
2 篇文章 0 订阅

形参变量只有在被函数调用的时候才分配内存单元,调用结束后即刻释放所分配的内存单元。

也就是在函数被调用时申请空间,此函数执行完后释放空间。

用如下代码举例

#include <stdio.h> 
void Exchange(int m,int n);
void Exchange(int m, int n) {
	int tmp;
	
	tmp = m;
	m = n;
	n = tmp;
}
int main () {
	int num1;
	int num2;
	
printf("请输入两个数:");
scanf("%d%d", &num1,&num2);

Exchange(num1,num2);
printf("交换后的值:");
printf("%d %d",num1,num2);
	return 0;
} 

执行完之后并未交换,是因为:

函数被调用时形参m和n申请了空间,空间中的值为num1和num2。而后执行的一系列交换操作是对形参所申请的空间中的值进行交换。当函数执行玩后这两个空间被释放,输出的值为主函数中num1和num2所申请的空间中的值,但是此空间并未被改变,所以输出的值是不变的。

所以使用调用函数时应当通过指针来对实参所在的空间进行操作。类似如下代码:

#include <stdio.h> 
void Exchange(int *m,int *n);
void Exchange(int *m, int *n) {
	int tmp;
	
	tmp = *m;
	*m = *n;
	*n = tmp;
}
int main () {
	int num1;
	int num2;
	
printf("请输入两个数:");
scanf("%d%d", &num1,&num2);

Exchange(&num1,&num2);
printf("交换后的值:");
printf("%d %d",num1,num2);
	return 0;
} 

此时,形参所申请的空间中放的是指向num1和num2的指针,而函数内部操作的控件是形参所指向的空间也就是num1和num2所在的空间,对此空间进行操作,当形参的空间被释放时也不会改变什么。


  • 1
    点赞
  • 0
    评论
  • 3
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值