【发布时间】:2016-12-13 11:59:03
【问题描述】:
我在玩指针,我试图用一个值而不是内存位置来初始化一个指针变量。
如果我用非零值初始化一个指针,它显然会给我一个编译时错误。
int *p = 1;
main.c:14:14: error: initialization makes pointer from integer without a cast [-Werror=int-conversion]
int *p = 1;
^
但是,如果我将它初始化为值 0,它不会给我一个编译时错误。
int *p = 0; //no compile time error but segmentation fault
为什么会这样?是否有像 0 这样的有效内存地址?通常,地址位置显示为0xffffff 或类似方式。 0如何解释成内存位置?
谢谢
【问题讨论】:
-
兼容性:0 是历史上定义 NULL 指针的方式
-
你是如何打印的?
-
用
printf("%p", (void*)p);打印指针 -
@init 表达式
*p取消引用指针。在空指针上,它会调用未定义的行为。 -
您是在取消引用它,而不是打印它的价值。并且取消引用无效指针是 UB。
标签: c pointers segmentation-fault