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

标签 c

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

相关文章:

c - 在不同情况下将数组复制到另一个数组的最可靠和优雅的方法是什么?

c - 链表删除节点

c - 为什么在函数 block 中定义枚举可能是一种不好的做法?

c++ - 为什么 _kbhit() 在 C 程序中只工作一次?

使用 DSH 将输出编译到文件

c - 如何将 lex 与 C 源文件一起使用?

c - C 语言文件 I/O 程序 : Segmention Fault (core dumped)

c++ - 开罗:重新填充对象(圆圈)并将其删除

C - 处理 HTTP 请求的库

c - 为什么输出给出这样的值?