2026/2/16 8:13:52
网站建设
项目流程
免费建靓号网站,个人备案做门户网站,wap网站 微信登录,网站迁移之前学排序时#xff0c;涉及到交换感觉次数太多#xff0c;于是乎就想着去封装个函数这还不简单错误示范思考为啥没有交换呢#xff0c;这不是放在主函数都可以的吗等等#xff0c;这么说的话#xff0c;那我试一下在函数直接打印呢果然#xff0c;数据被交换了#xf…之前学排序时涉及到交换感觉次数太多于是乎就想着去封装个函数这还不简单错误示范思考为啥没有交换呢这不是放在主函数都可以的吗等等这么说的话那我试一下在函数直接打印呢果然数据被交换了这是为啥呢我反复检查函数发现了些问题函数传入的是一个值还是其他东西会不会只是传入了值然后在主函数中变量并未被更改启发查阅资料我总结了这么些句话在 C 语言中一个局部变量或全局变量一旦被创建它的内存地址在该作用域的生命周期内是固定的不能更改。你只能改变它存储的“值”不能改变它“住在哪里”地址。函数内部的变量是局部的即使你在主函数里写交换逻辑也不能通过普通参数传值的方式影响外部变量那么上面就可以解释了传入的是一个值不是地址只在函数内部修改了a,b由主函数函数传入一旦离开函数swap1a,b就会被销毁而x,y的地址没改验证如下解决方法理论知识因此想要改数据就得改地址但是我们知道一个局部变量或全局变量一旦被创建它的内存地址在该作用域的生命周期内是固定的不能更改。你只能改变它存储的“值”不能改变它“住在哪里”地址。所以只能间接操作什么意思呢我们可以根据上面重新审视变量变量 值 地址 名字所以我们不改变x , y 的原本地址我们通过一下三步即可通过指针取出x的值传给指针变量a注意xy的地址始终没变通过指针取出y的值传给指针变量b交换,也就是把从x-1 y-2改为x-2 y-1举个例子就好比现在有信箱x和信箱y分别装着信1和信2有两位快递员a,b上面第1步就是从信箱1把信1给快递员a信箱位置不会变第2步就是从信箱2把信2给快递员b第3步就是快递员b把信2送到信箱1快递员a把信1送到信箱2最终代码如下#include stdio.h void swap1(int a,int b) { int temp a; a b; b temp; printf(函数运行后没到主函数%d %d\n,a,b); } void swap2(int* a , int* b) { int temp *a;//这里要注意temp只是用来临时存放相当于快递中转站 *a *b; *b temp; } int main() { int x1,y2; printf(交换前%d %d\n,x,y); printf(%p %p\n,x,y); swap1(x,y); printf(%p %p\n,x,y); printf(交换后%d %d\n,x,y); printf(-------------------------\n); printf(交换前%d %d\n,x,y); printf(%p %p\n,x,y); swap2(x,y); printf(%p %p\n,x,y); printf(交换后%d %d\n,x,y); }本人经验不足如有漏洞还望指教谢谢