二级指针综合使用

通过指针参数实现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

results matching ""

    No results matching ""