C++中交换指针的问题

通常的话,我们都只是对普通的数据进行交换,交换指针的情况并不多见,出于感兴趣,自己在这方面也稍微总结一下以便查阅;

首先看一下两个数据的交换:(比较简单):

void swapp1(int *p,int *q)
{
	int temp;
	temp=*p;
	*p=*q;
	*q=temp;
}
通过指针访问整型数据并进行交换;但是如果想交换指针的话,就要通过访问指针的指针来进行交换(指针也只是一个普通的常量而已,它也有地址)所以,C风格下的代码如下:

void swapPtr(int **a, int **b)
{
	int *temp = *a;
	*a=*b;
	*b=temp;
}

函数的验证代码如下:

int main()
{
	int x=10;
	int y=20;
	int *px = &x;
	int *py = &y;
	cout<<"x="<<x<<",  y="<<y<<endl;
	cout<<"*px="<<*px<<",  *py="<<*py<<endl;
	cout<<"px="<<px<<",  py="<<py<<endl;
	cout<<"&x="<<&x<<", &y="<<&y<<endl;

	swapPtr(&px,&py);
	cout<<endl;

	cout<<"x="<<x<<",  y="<<y<<endl;
	cout<<"*px="<<*px<<",  *py="<<*py<<endl;
	cout<<"px="<<px<<",  py="<<py<<endl;
	cout<<"&x="<<&x<<", &y="<<&y<<endl;
	system("pause");
	return 0;
}

运行结果如下:

                                                      

可以看出,交换指针只是px和py发生了改变,即px存储了y的地址,py存储了x的地址,也就是可以通过px访问y,通过py访问x,但是x,y本身的地址不会改变!

当然,我们也可以通过C++中的引用,即使用指针的引用来实现:

void swapPtr2(int *&a,int *&b)
{
	int *temp;
	temp = a;
	a=b;
	b=temp;
}

调用时:

	swapPtr2(px,py);
运行结果:

                                                   
C++11中,也可以使用swap()函数进行交换数据的操作;具体见:http://www.cplusplus.com/reference/algorithm/swap/


  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值