C语言里的传值调用和传值调用

传值调用

传值调用相关代码及用法

传值调用代码

void print(int x, int y)
{
	if (x > y)
	{
		printf("%d\n", x);
	}
	else
	{
		printf("%d\n", y);
	}
	return 0;
}

int main()
{
	int i = 0;
	int j = 0;
	i = 10;
	j = 20;
	print(i, j);
}

传值调用用法

上面代码是比较两个数大小,利用print函数实现。通过主函数的i、j数值传送到print函数的x、y接收。其中主函数里面的i、j称为实参,而print函数里面的x、y称为形参,形参只是实参的一份临时拷贝。

传址调用

传址调用相关代码及用法

传址调用代码

void Swap(int* x, int* y)
{
	int z = *x;
	*x = *y;
	*y = z;
}
int main()
{
	int a = 10;
	int b = 20;

	printf("交换前:a=%d b=%d\n", a, b);

	Swap(&a, &b);

	printf("交换后:a=%d b=%d\n", a, b);
	return 0;
}

传址调用用法

上面代码是交换两个数的数值,利用Swap函数实现。通过主函数传递a、b地址到Swap函数的int* x、int* y接收。通过传送实参地址给实参,来交换两个数的数值。

传值调用代码用传值调用实现的可能

通过上面的代码讲解,我们不妨尝试使用传值调用来实现传址调用的功能

void Swap(int x, int y)
{
	int z = 0;
	z = x;
	x = y;
	y = z;
}

int main()
{
	int a = 10;
	int b = 20;
	int c = 0;

	printf("交换前:a=%d b=%d\n", a, b);
	
	Swap(a, b);

	printf("交换后:a=%d b=%d\n", a, b);
	return 0;
}

代码结果如图:
在这里插入图片描述
我们发现传值调用并不能实现传址调用的功能。因为传值调用的时候,形参只是实参的一份临时拷贝,实参和形参是两个独立空间,在形参里面改变的值并不会影响实参。

那么如何判断什么时候用传值调用,什么时候用传址调用?(以上面传址调用代码为例)
在函数Swap想要交换函数main里面的a,b值时候,main函数需要把实参的地址传给形参次才能实现形参修改实参值。因为传址调用时候,指针能指向实参地址并实现值的改变。若是传值调用并无法改变实参值a,b,因为形参会新生成一个空间(即地址)存放实参传过来数值,形参此时进行变动只是改变形参的数据,并不会影响实参的原值,因为形参只是实参的一份临时拷贝。所以在形参不需要改变实参值时候,只需要传值即可。若需要改变实参值,即要传址调用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值