[英]Pointer to Pointer in c, getting unexpected value
我正在对指针进行一些操作并遇到了这个:
int main(void)
{
int a = 100;
int *p, *q;
p = &a;
q = &p;
printf("\n *q= %p",*q);
printf("\n &p= %p",&p);
printf("\n *p= %d",*p);
printf("\n q= %p",q);
printf("\n p= %p",p);
printf("\n &a= %p",&a);
return 0;
}
这给了我以下输出
*q= 0xe5b83d74
&p= 0x7ffee5b83d78
*p= 100
q= 0x7ffee5b83d78
p= 0x7ffee5b83d74
&a= 0x7ffee5b83d74
*q
给出的值类似于a
的地址,但不相同。 *q
不是指&a
吗? 我不是要更正此代码。 这里究竟发生了什么?
指向a
的指针被截断并打印。 您正在获取一个指向int
指针的指针,并使其成为指向int
的指针。 它只显示了指针的 32 位,也就是可以放入int
的 32 位。
如果您在 32 位平台(x86、ARM)上运行它, &a
将与*q
相同。
您在标题中注意到这是一个指向指针的指针。 然而,事实并非如此。 它是一个指向已被转换为指向int
并取消引用的指针的指针。 有区别,如图所示。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.