繁体   English   中英

指向 c 中的指针的指针,获得意外值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM