这里的地址是什么?
int main(void) {
int i = 5;
int *p;
p = &i;
printf("%d\n",*p);
printf("%d\n",i);
printf("%d\n",p);
printf("%d\n",&i);
printf("%p\n",p);
printf("%p\n",&i);
return 0;
}
输出:
5
5
-7530484
-7530484
0xff8d180c
0xff8d180c
那些是输出,但是为什么p给了我-7530484
我猜它必须是指针但是那个0xff8d180c
是什么?
答案 0 :(得分:2)
在您的代码中,
printf("%d\n",p);
printf("%d\n",&i);
调用undefined behavior。不要那样做。
打印任何指针类型的理想方法是
%p
格式说明符void *
要详细说明看到的输出部分,与%d
格式说明符一起提供的任何参数都将被解释为int
类型。这里提供的参数实际上是int *
类型(指针类型),int
和int *
不是导致UB的兼容类型。在这种情况下,无法保证您看到的输出的可重现性,它可以很好地显示某些其他平台/环境的其他垃圾值。