有人可以向我解释双指针如何工作吗?例如,在这段代码中,为什么它会打印最后打印的值?
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)
我们来画一下:
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;