双指针 C/C++

Vla*_*hka 2 c pointers

有人可以向我解释双指针如何工作吗?例如,在这段代码中,为什么它会打印最后打印的值?

int main(void) {
    int anArray[] = {5,16,33,99};
    int * p = anArray;

    printf("*p = %d\n", *p);
    p++;
    printf("Now *p = %d\n", *p);

    int * q = &anArray[3];
    int ** x = &q;
    **x = 12;
    *x = p;
    **x = 42;
    q[1] = 9;

    for (int i =0; i < 4; i++){
        printf("anArray[%d] = %d\n",i, anArray[i]);
    }

    return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

Tho*_*ews 5

我们来画一下:

int q = 15;
int * p = &q;
int * * z = &p;

            q   
          +----+  
    p --> | 15 |  
    ^     +----+  
    |  
    z  
Run Code Online (Sandbox Code Playgroud)

上图中,是一个整型变量q值为15。
指针指向变量。 指针指向指针 pq
zp

表达式*z引用指针中的值p
表达式**z或重写为*(*z)引用变量q(链接后面)。

我们知道这(*z)是指针p,所以让我们替换:
*(*z) == *(p);

我们可以用上面的定义中的 , *(p)来替换: 。q*(*z) == *(p) == q;