广而告知: 博客写得好,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的值并没有交换成功。
最后,请各位发财的金手指,帮忙点点赞和关注!
💁♂️💁♀️🙋🙋♂️🙋♀️🧏🧏♂️一赞三连🧏♀️🙇🙇♂️🙇♀️🤦🤦♂️🤦♀️🤷🤷♂️🤷♀️
💁♂️💁♀️🙋🙋♂️🙋♀️🧏🧏♂️一赞三连🧏♀️🙇🙇♂️🙇♀️🤦🤦♂️🤦♀️🤷🤷♂️🤷♀️
💁♂️💁♀️🙋🙋♂️🙋♀️🧏🧏♂️一赞三连🧏♀️🙇🙇♂️🙇♀️🤦🤦♂️🤦♀️🤷🤷♂️🤷♀️