这里的负指针值是多少?

时间:2017-01-05 11:58:26

标签: c pointers

这里的地址是什么?

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是什么?

1 个答案:

答案 0 :(得分:2)

在您的代码中,

printf("%d\n",p);
printf("%d\n",&i);

调用undefined behavior。不要那样做。

打印任何指针类型的理想方法是

  • 使用%p格式说明符
  • 将参数投射到void *

要详细说明看到的输出部分,与%d格式说明符一起提供的任何参数都将被解释为int类型。这里提供的参数实际上是int *类型(指针类型),intint *不是导致UB的兼容类型。在这种情况下,无法保证您看到的输出的可重现性,它可以很好地显示某些其他平台/环境的其他垃圾值。