二级指针

int a = 10;
int *b = &a;
//                        &b
void Func3(int **ptr)
{
    *ptr = new int;
    **ptr = 110;
    int *ptr2 = nullptr;
    ptr2 = *ptr;
    cout << *ptr << endl;
}

暂不考虑函数参数副本机制

解释:

a是值为10的整数

&a是整型a在内存中的地址

*b定义了一个整型的指针变量b指向a在内存中的地址

b 存放的是a的地址,等价于&a

**ptr定义了一个二级指针,由于传入的参数是&b,所以该指针指向b

ptr存放的是b的地址,等价于&b

&ptr ptr在内存中的地址

*ptr 对ptr中存放的数据(实际上是b的地址,等价于&b)进行解引用,等价于 *(&b) ,又因为b中存放的是a的地址,所以实际结果是&a

**ptr由上条可知, *ptr 等价于&a,所以 **ptr等价于 *(&a),所以结果为10

你可能感兴趣的:(二级指针)