通常的话,我们都只是对普通的数据进行交换,交换指针的情况并不多见,出于感兴趣,自己在这方面也稍微总结一下以便查阅;
首先看一下两个数据的交换:(比较简单):
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/