这段代码:
#include <stdio.h>
int main() {
int num;
int *pi;
num = 0;
pi = #
printf("address: %p | %d\nvalue: %d\n", pi, pi, *pi);
}
产生这个输出:
address: 0x7fff5952f9cc | 1498610124
value: 0
我知道左边应该是正确的地址,但是地址旁边打印的是什么?
最佳答案
%p
告诉 printf
将相应的变量视为指针,因此 printf
将 p
打印为指针;即,十六进制表示(即 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/