使用交换函数来实现变量的修改以及指针指向的修改

第一类:传值

给定两个变量 a ,b 问使用 swap1函数是否实现值的交换??

void Swap1(int left, int right)
{
	int tmp = left;
	left = right;
	right = tmp;
}
int main()
{
	int a = 10;
	int b = 20;

	Swap1(a, b);

	return 0;
}

答案:不能

因为 left 与 right 分别是 a, b 的一份临时拷贝,因此形参 left right 的改变不会影响实参 a,b 的修改

分析:
在运行监视窗口可以看到 a, b, left , right 的空间分配地址是各不相同的,说明是四个单独的变量
在这里插入图片描述

由于 left right 分别是 实参 a b 的一份临时拷贝,因此交换 left 与 right 变量的内容并不会影响实参 a b 的值变化
在这里插入图片描述

第二类:传址

void Swap2(int *left, int *right)
{
	int tmp = *left;
	*left = *right;
	*right = tmp;
}
int main()
{
	int a = 10;
	int b = 20;
	
	Swap2(&a, &b);

	return 0;
}

此时 a, b 的值进行了交换

分析:
由于传递的是 a, b 变量的地址,因此对 *left 与 *right 变量的修改就是对 a, b 的修改
在这里插入图片描述

此时,left right 分别保存的是 a,b 的地址,
因此 *left => a ,
*right => b
在这里插入图片描述

第三类:传值

void Swap3(int *left, int *right)
{
	int tmp = *left;
	*left = *right;
	*right = tmp;
}
int main()
{
	int a = 10;
	int b = 20;
	int*pa = &a, *pb = &b;
	Swap3(pa, pb);

	return 0;
}

此时并不能修改 pa, pb 的指向

分析:

在这里插入图片描述

此时只是通过 pa ,pb修改了 a, b 的值,并没有修改 pa, pb 的指向

在这里插入图片描述

第四类:传址(重点分析)

void Swap4(int **left, int **right)
{
	int *tmp = *left;
	*left = *right;
	*right = tmp;
}
int main()
{
	int a = 10;
	int b = 20;
	int*pa = &a, *pb = &b;
	
	Swap4(&pa, &pb);

	return 0;
}

此时 pa, pb 的指向进行了修改

分析:

此时 left right 中存储的分别是 pa pb 的地址
pa pb 中存储的是 a b 的地址(指向如图所示)

在这里插入图片描述

在这里插入图片描述

通过二级指针来修改指针指向

ps:内容为原创,有问题欢迎留言呀~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值