求大神帮忙解释一下下面的swap函数为什么出错(c++的关于指针方面的)

求大神帮忙解释一下下面的swap函数为什么出错(c++的关于指针方面的),第1张

你将temp指针赋初值0,即NULL,意味着temp没有指向有意义的地址,其实指向0X00000000,但是那个地方你不能用,也就是说*temp无法赋值滑瞎庆。神前把int

*temp=0

改成

int

*temp或者如信握qiufozhell所说直接用变量temp,不用指针

你的int swap(int,int) 函数是传值,这个在实参代入函数的镇行时候御盯哗会拷贝一个临时副本给形参,内存地址是不一样的,不是用你本身实参在内存地址中实际存在的值,所以你swap函数是对临时副本的值做值交换,不会影响实际的a,b值。这里想交换a,b值的话,只要传递的是a,b所在实际内存地址的值就行了,可以有两种方法:传引用(直接是a,b做处理),传指针(传入a,b实际地址)

传指针:

#include <iostream>

int swap(int *,int *) //函数声明要改则坦

int main()

{

int a=1,b=15

std::cout<<a<<" "<<b<<std::endl

swap(&a,&b)//这边使用注意,传入的是a,b地址

std::cout<<a<<" "<<b<<std::endl

return 0

}

int swap(int *x,int *y) //函数定义要改

{

int z

z=*x

*x=*y

*y=z

return 0

}

传引用:

#include <iostream>

int swap(int &,int &) //函数声明要改,其他不用改

int main()

{

int a=1,b=15

std::cout<<a<<" "<<b<<std::endl

swap(a,b)

std::cout<<a<<" "<<b<<std::endl

return 0

}

int swap(int &x,int &y) //函数声明要改,其他不用改

{

int z

z=x

x=y

y=z

return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12412322.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-23
下一篇2023-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存