首页 > 解决方案 > 指向 c 中的指针的指针,得到意外的值

问题描述

我正在对指针进行一些操作,并遇到了这个:

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我不是想更正这段代码。这里实际发生了什么?

标签: cpointersmemory-address

解决方案


指向的指针a被截断并打印。您正在获取指向 an 的指针int并将其设为指向 an 的指针 int。它只显示指针的 32 位,这些 32 位可以放入int.

如果您在 32 位平台(x86、ARM)上运行它,&a则与*q.

您在标题中注意到这是一个指向指针的指针。然而,事实并非如此。它是一个指向指针的指针,该指针已转换为指向 anint并取消引用的指针。有一个区别,如图所示。


推荐阅读