二级指针综合使用
通过指针参数实现2指针交换
#include <iostream>
using namespace std;
void swap1(int *p1,int *p2){
int *t;
t = p1;
p1 = p2;
p2 = t;
}
int main(int argc, const char * argv[]) {
int a= 1, b= 2;
int *pa = &a, *pb = &b;
cout<<"*pa:"<<*pa<<endl;
cout<<"*pb:"<<*pb<<endl;
cout<<endl;
swap1(pa,pb);
cout<<"*pa:"<<*pa<<endl;
cout<<"*pb:"<<*pb<<endl;
return 0;
}
*pa:1
*pb:2
*pa:1
*pb:2
分析:这是我们传递的是指针的值,实际上对指针的外面发生不了变化。所以外面的*pa
,*pb
输出不变。也就是说函数的内部发生了交换,但是对外面毫无影响。
要想改变外面的参数值,需传入指针的地址,也就是二级指针。
#include <iostream>
using namespace std;
void swap1(int *p1,int *p2){
int *t;
t = p1;
p1 = p2;
p2 = t;
}
void swap2(int **p1, int **p2){
int *r;
r = *p1;
*p1 = *p2;
*p2 = r;
}
int main(int argc, const char * argv[]) {
int a= 1, b= 2;
int *pa = &a, *pb = &b;
cout<<"*pa:"<<*pa<<endl;
cout<<"*pb:"<<*pb<<endl;
cout<<endl;
swap1(pa,pb);
cout<<"*pa:"<<*pa<<endl;
cout<<"*pb:"<<*pb<<endl;
cout<<endl;
swap2(&pa,&pb);
cout<<"*pa:"<<*pa<<endl;
cout<<"*pb:"<<*pb<<endl;
return 0;
}
*pa:1
*pb:2
*pa:1
*pb:2
*pa:2
*pb:1