在下面的示例中,
当我尝试在 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/