这段代码:
#include <stdio.h>
int main() {
int num;
int *pi;
num = 0;
pi = #
printf("address: %p | %d\nvalue: %d\n", pi, pi, *pi);
}
Run Code Online (Sandbox Code Playgroud)
产生这个输出:
address: 0x7fff5952f9cc | 1498610124
value: 0
Run Code Online (Sandbox Code Playgroud)
我知道左边的那个应该是正确的地址,但是地址旁边打印的是什么?
%p告诉printf将相应的变量视为指针,从而printf打印p为指针; 也就是说,十六进制表示(即0x7fff5952f9cc).%d另一方面告诉printf将相应的变量视为数字.因此,正在打印的是(即)的实际数值,其在基数10中仅为0x5952f9cc.p1498610124
现在,同一个变量的这两个表示似乎具有不同值的原因是,%d只能告诉printf期望一个数字---它没有指定该数字的类型.如果将0x7fff5952f9cc(64位整数)转换为int(32位类型),则会得到1498610124(通知会0x7fff被删除).