C++中交换指针的问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhang_alongzd/article/details/52937684

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

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

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/


猜你喜欢

转载自blog.csdn.net/zhang_alongzd/article/details/52937684
今日推荐