c - 当用 %d 打印 int 指针时打印出什么?

标签 c pointers

这段代码:

#include <stdio.h>

int main() {
    int num;
    int *pi;
    num = 0;
    pi = &num;
    printf("address: %p | %d\nvalue: %d\n", pi, pi, *pi);
}

产生这个输出:

address: 0x7fff5952f9cc | 1498610124
value: 0

我知道左边应该是正确的地址,但是地址旁边打印的是什么?

最佳答案

%p 告诉 printf 将相应的变量视为指针,因此 printfp 打印为指针;即,十六进制表示(即 0x7fff5952f9cc)。另一方面,%d 告诉 printf 将相应的变量视为数字。因此,打印的是 p实际数字值(即 1498610124),它只是以 10 为基数的 0x5952f9cc。

现在,同一个变量的这两个表示似乎具有不同值的原因是 %d 只告诉 printf 期待一个数字——它没有'指定该号码的类型。如果将 0x7fff5952f9cc(64 位整数)转换为 int(32 位类型),您将得到 1498610124(注意 0x7fff 被丢弃)。

关于c - 当用 %d 打印 int 指针时打印出什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29137757/

相关文章:

代码只能在一个编译器中运行

c - C中二维数组内的一维数组比较

两个程序中指针的地址可以相等吗?

delphi - Delphi 中 CONTAINING_RECORD C 宏的等效函数是什么?

c++ - 在 C 中声明结构的新实例

c - 线程同步,谁能给我算法?

c++ - 为什么在 C/C++ 的这个 while 循环中解引用只发生一次?

c - 问题取消引用类型 void**

c++ - 地址在多个指针中不连续

c - 我面临段错误(代码已转储)