victory的博客

长安一片月,万户捣衣声

0%

C++ | 二级指针

c++二级指针

  • 普通变量作为形参

    在函数中采用普通变量接收实参传递的变量,对变量的操作是对实参拷贝值的操作,不会改变原有变量的值

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #include<iostream>

    using namespace std;

    void change_value(int a){
    a = 10;
    }

    int main(){
    int a = 10;
    cout << "before changed,a=" << a << endl;//输出:before changed,a=10
    change_value(a);
    cout << "after changed,a=" << a << endl;//输出:after changed,a=10
    return 0;
    }
  • 指针变量作为形参

    由上可知,普通变量作为形参时,对变量的操作其实是对拷贝值的操作,不会改变原来变量的值,若要改变原来变量的值,可采用指针变量作为形参。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #include<iostream>

    using namespace std;

    void change_value(int *p){
    *p = 20;
    }

    int main(){
    int a = 10;

    cout << "before changed,a=" << a << endl;//输出:before changed,a=10
    change_value(&a);
    cout << "after changed,a=" << a << endl;//输出:after changed,a=20

    return 0;
    }
  • 二级指针作为形参

    以上是通过函数修改普通变量的值,若要对指针变量的指向进行修改,则需要使用二级指针来实现。

    首先在函数中,采用指针变量作为形参接收实参传递的指针,示例代码如下,由代码输出结果可知,用指针变量作为形参不能够修改原来指针的指向。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #include<iostream>

    using namespace std;

    void change_value(int *p){
    p = new int(20);
    }

    int main(){
    int a = 10;
    int *p = &a;

    cout << "before changed,*p=" << *p << endl;//before changed,*p=10
    change_value(p);
    cout << "after changed,*p=" << *p << endl;//after changed,*p=10

    return 0;
    }

    以下代码是二级指针作为形参的示例代码,由代码输出可知,二级指针作为形参时可以修改原来指针变量的指向。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #include<iostream>

    using namespace std;

    void change_value(int **p){
    *p = new int(20);
    }

    int main(){
    int a = 10;
    int *p = &a;
    int **pp = &p;
    cout << "before changed,*p" << *p << endl;
    change_value(pp);
    cout << "before changed,*p" << *p << endl;
    cout << "after changed,**pp" << **pp << endl;

    return 0;
    }

此外,二级指针还常与结构体、数组一起使用,二级指针搭配结构体/数组的使用将在后续补充 !