【问题标题】:Pointer to Pointer in c, getting unexpected value指向 c 中的指针的指针,得到意外的值
【发布时间】:2020-01-05 17:18:40
【问题描述】:

我在对指针做一些操作时遇到了这个:

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

【问题讨论】:

    标签: c pointers memory-address


    【解决方案1】:

    指向a 的指针被截断并打印。您正在获取指向int 的指针的指针,并使其成为指向int 的指针。它只显示了指针的 32 位,这是可以放入 int 的 32 位。

    如果您在 32 位平台(x86、ARM)上运行,&a 将与 *q 相同。

    您在标题中注意到这是一个指向指针的指针。然而,事实并非如此。它是一个指向已转换为指向int 并取消引用的指针的指针。此处显示存在差异。

    【讨论】:

    • @SirJoBlack 你很好。每个人都会犯错误:)。
    猜你喜欢
    • 2021-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 2011-04-24
    • 1970-01-01
    相关资源
    最近更新 更多