【传值调用和传址调用】

传值调用和传址调用

传值调用

 上传统的经典代码!!!

void Swap1(int x, int y)
{
	int tmp = 0;
	tmp = x;
	x = y;
	y = tmp;
}

int main()
{
	int a = 1;
	int b = 2;
	printf("交换前:a = %d b = %d\n", a, b);
	Swap1(a, b);
	printf("交换后:a = %d b = %d\n", a, b);
	return 0;
}

 调试解决!!!

1

 swap函数的作用是将a和b的值调换,但是显然没有达到这种效果!根据调试来找原因,在main函数里面,在栈区创建了a,b并且在这两块空间里放了值,通过swap1函数的形参x和y接受了a和b的值,通过调试可以看出a和x是两块不同的空间,b和y是两块不同的空间,把a和b的值传过去后,只是在x和y的空间交换了,跟a和b没有关系,所以不能完成交换!!!
结论:实参传递给形参的时候,形参会单独创建⼀份临时空间来接收实参,对形参的修改不影响实参。

传址调用

 上传统的经典代码!!!

void Swap2(int* px, int* py)
{
	int tmp = 0;
	tmp = *px;
	*px = *py;
	*py = tmp;
}

int main()
{
	int a = 1;
	int b = 2;
	printf("交换前:a = %d b = %d\n", a, b);
	Swap2(&a, &b);
	printf("交换后:a = %d b = %d\n", a, b);
	return 0;
}

 调试解决!!!
1

 通过运行可以看出,传地址调用的方式真的交换了a所在空间的内容和b所在空间的内容,通过调试可以看出,通过地址找到的空间是同一块空间,因此完成了交换!!!传址调⽤,可以让函数和主调函数之间建⽴真正的联系,在函数内部可以修改主调函数中的变量;所以未来函数中只是需要主调函数中的变量值来实现计算,就可以采⽤传值调⽤。如果函数内部要修改主调函数中的变量的值,就需要传址调⽤。

总结

 传值调用:传值调用的本质是把实参复制一份,放到形参开辟的一块空间中,本质是两块空间,形参的空间和实参的空间没有任何关系。如果不该变实参的内容,则用传值调用。
 传地址调用:传地址调用的本质是形参也开辟了一块空间,在形参开辟的空间中,里面存的是实参的地址,那么可以通过地址,找到实参真正的空间,进行操作改变实参的内容。


完结!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值