如何使用指针交换函数中两个变量的值(指针篇百题1)

广而告知: 博客写得好,Emoji要选好!!🎵 🎶 🔈 🔇 🔉 🔊 🔔 🔕 📣 📢
写博客是知识是巩固和温习,所以在这个信息爆炸的时代,每个人每天都要接收很多讯息,你的记忆是有限的,知识也是有限的,时间也是有限的,既然如此,那是时候磨亮我的五十米大刀了。 你很强,上天揽月你不行,你很强,下海捞鱼总行吧!

💀☠💩🤡👹👺👻👽👾🤖 -->渴望知识!!!
 

1.交换两个变量的值,为什么需要使用指针?

主要是以下两点原因:

1)因为使用外部交换函数的时候,需要传递变量的地址,并通过指针直接对地址中存放的值进行修改。

2)形参是实参的临时拷贝,如果传递的只是变量的数值和不是地址,那么当交换函数执行结束后,临时分配的地址也会释放销毁掉。

我们分析一下代码:

int c=*b;  //将b的值进行解引用之后赋值给c

*b = *a; //将指针a指向的地址存放的变量的值赋值给指针b指向的的地址存放的变量。

*a=c ;//把指针a指向的地址存放的变量的值用c的值替代

#include <stdio.h>
int swap(int *a,int *b)
{
	int c = *b;
	*b = *a;
	*a = c;
	printf("a=%d,b=%d\n", *a, *b);
}
int main()
{
	int a = 10, b = 5;
	swap(&a, &b);
	printf("a=%d,b=%d\n", a, b);
	return 0;
}

window 系统编译,按下fn+f5,输出结果:

大家可以看到两个变量的值确实并修改了。

单独解析一下:

#include <stdio.h>
int main()
{
	int a = 10;
	int b = 5;

	printf("a=%d\n", a);
	printf("b=%d\n", b);
	int *c = &a; //取地址a指向变量的值
	b = *c;      //对指针C地址所指向变量的值赋值给b
	int* d = b;  //将指针d地址所指向变量的值用b的值替代
	printf("a=%d\n", a);
	printf("b=%d\n", b);
	printf("d=%d\n", d);

	return 0;

}

2.如果不使用指针交换,又会是什么结果呢?

请看下面的代码!

#include <stdio.h>
int swap(int a, int b)
{
	int c = b;
	b = a;
	a = c;
	printf("a=%d,b=%d\n", a, b);    //临时拷贝的时候,在swap函数内部运行的时候会交换一次,但是退出swap的时候,所有分配的空间都会释放掉,
	//因此并没有实质上将啊,b的进行交换。 
}
int main()
{
	int a = 10, b = 5;
	swap(a, b);
	printf("a=%d,b=%d\n", a, b); //因此这里打印a,b的值实际上并没有进行交换。 
	return 0;
}

window 系统编译,按下fn+f5,输出结果:

大家可以看到变量a,b的值并没有交换成功。

最后,请各位发财的金手指,帮忙点点赞和关注!

💁‍♂️💁‍♀️🙋🙋‍♂️🙋‍♀️🧏🧏‍♂️一赞三连🧏‍♀️🙇🙇‍♂️🙇‍♀️🤦🤦‍♂️🤦‍♀️🤷🤷‍♂️🤷‍♀️

💁‍♂️💁‍♀️🙋🙋‍♂️🙋‍♀️🧏🧏‍♂️一赞三连🧏‍♀️🙇🙇‍♂️🙇‍♀️🤦🤦‍♂️🤦‍♀️🤷🤷‍♂️🤷‍♀️

💁‍♂️💁‍♀️🙋🙋‍♂️🙋‍♀️🧏🧏‍♂️一赞三连🧏‍♀️🙇🙇‍♂️🙇‍♀️🤦🤦‍♂️🤦‍♀️🤷🤷‍♂️🤷‍♀️

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值