我正在尝试探索C中的指针,所以这个主题很新。我开始知道最佳做法是在声明指针时指定“NULL”。所以在下面的程序中我做了同样的事情:
#include <stdio.h>
int main() {
unsigned int *ip = NULL;
printf("Address stored in pointer: %x \n",ip); //gives 0
printf("Value stored at Address stored in pointer: %d \n",*ip); // gives "Segmentation fault (core dumped)"
return 0;
}
我无法清楚地知道为什么会这样。它不应该输出一个值(NULL或其他东西)。
我正在使用centos 6.5和gcc版本4.4.7。
答案 0 :(得分:2)
人们将NULL
分配给指针以指示它指向任何内容。
取消引用指向不属于您的程序的内存的指针
(NULL==0
和地址0
属于您的操作系统)
是未定义的行为。
人们将NULL
分配给能够编写的指针
if(ip) //NULL==0==false, so the condition means "if ip points to something"
printf("Value stored at Address stored in pointer: %d \n",*ip);
else printf("The pointer points to NULL, it can't be dereferenced\n");