自定义Swap
网上看到的一篇文章加深了对指针的了解,收藏一下
自定义的swap函数是一个老掉牙的问题,而这个问题对于理解指针和内存中的栈是很有帮助的
一般自定swap函数是这样的:
1.swap函数的功能是实现两个的相互替换
2.在main函数中调用swap函数,以实现main栈中两个数的相互替换
void swap1(int x, int y)
{//当swap1传入的是整形变量时,swap1栈中会开辟了2个整形变量副本,当swap1运行结束时,swap1栈会销毁,所以这两个副本也会销毁。这时,swap1里面的任何操作对man函数栈中的a,b是没有任何作用的,所以是不能交换的
Int temp;
temp = x;
X = y;
Y = temp;
}
void swap2(int *x, int *y)
{//这里边很多人可能就不能理解了!在main栈中,&a指向4的地址,&吧指向5的地址,Swap2函数在swap2栈中定义了两个整形变量指针x,y;一开始x 指向 4的地址,y指向5的地址,函数运行完最后一步时(swap2栈还没销毁前),x指向5的地址,y指向4的地址,这时*x和*y值交换是成功的。但是这种交换并没有改变main栈中&a和&b的指向,&a依然指向的是4的地址,&b依然指向的是5的地址。简单总结一下就是,swap2函数只是交换了x和y的指向的地址,却并没有影响到&a和&b指向的地址
Int *temp;
temp = x;
X = y;
Y = temp;
}
void swap3(int *x, int *y)
{//在main栈中,&a指向4的地址,&吧指向5的地址,Swap2函数在swap2栈中定义了两个整形变量指针x,y;一开始x 指向 4的地址,y指向5的地址。也就是说&a和x指向同一个地址,&b和y指向同一个地址!函数运行完最后一步时(swap2栈还没销毁前),x和y把自己指向的地址的值改变了,这时候的改变就影响到了main栈中&a和&b指向的地址的值,所以交换就成功了
Int temp;
temp = *x;
*x = *y;
*y = temp;
}
Void swap4(int *x, int *y)
{//这个程序运行时是会报段错误的,因为temp没有初始化指针,但是却马山用了它,这是很危险的
Int *temp;
*temp = *x;
*x = *y;
*y = *temp;
}
Int main(void)
{
Int a = 4;
Int b = 5;
swap1(a, b);
Swap2(&a, &b);
Swap3(&a, &b);
return 0;
}
void Swap1(int &a,int &b){
int t;
t=a;
a=b;
b=t;
}
引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。
引用的声明方法:类型标识符 &引用名=目标变量名;
【例1】:int a; int &ra=a; //定义引用ra,它是变量a的引用,即别名
所以对引用的操作就是对传入变量的操作。
转载:https://blog.csdn.net/duan_jin_hui/article/details/50879338?utm_source=copy
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!