gpt4 book ai didi

c - *(&ptr) 和 *(ptr) 之间有什么区别

转载 作者:行者123 更新时间:2023-11-30 21:28:33 28 4
gpt4 key购买 nike

在下面的示例中,当我尝试在 printf 中使用 ptr&ptr 时,它打印了 a 的地址。

int main()
{
int a = 10;
int *ptr = &a;
printf("%d", ptr);
return 0;
}

但是当我在 printf 语句中使用 *(&ptr)*(ptr) 时,为什么它会打印两个不同的输出?我的意思是在下面的代码中,如果它为 ptr&ptr 打印相同的输出,那么为什么 *(ptr) 不等于 * (&ptr)

最佳答案

此代码不会为 ptr 和 &ptr 打印相同的输出:

据我猜测,它将打印两个不同的无符号长整型(32 位指针的大小)或无符号长整型(64 位指针的大小),差异为 32 (64),因为它们的目标都是在堆栈上一个接一个地分配的数据。

如果您尝试打印 ptr 和 &ptr。

打印 *(ptr) 和 *(&ptr) 将分别打印一个 int 和一个指针(如上所述)。

TL/DR:两个不同的变量打印不同的数据是正常的。

PS:我很惊讶你的编译器允许你将指针打印为 %d。

关于c - *(&ptr) 和 *(ptr) 之间有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40684046/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com