我正在尝试使用双指针(指向指针的指针)并想正确理解它。我正在尝试以下代码
#include<stdio.h>
int main()
{
int y = 5;
int *p = &y;
int *q = &p;
printf("\n\n %p %p %p %p %d\n\n",q,&p,p,*q,*p);
return 0;
}
现在在上面的代码中,p 是指向 y 的指针,q 是指向 p 的指针。我故意不使用双指针 (**q) ,只是为了检查会发生什么。编译器给了我一个警告,指出不兼容的指针类型。当我执行代码时,我明白 q 是指向 p 的指针,所以它包含 p 的地址,但是 *q 并没有给我 p 中包含的值,即 y 的地址,而是我得到了一些垃圾值. 是因为我没有将 q 声明为双指针吗?谁能解释为什么我得到了一些奇怪的价值 *q ?