第1个回答 推荐于2019-08-18
在C语言中,NULL和0的值都是一样的,但是为了目的和用途及容易识别的原因,NULL用于指针和对象,0用于数值。对于字符串的结尾,使用'\0',它的值也是0,但是让人一看就知道这是字符串的结尾,不是指针,也不是普通的数值。
拓展资料:
关于NULL的使用
编程工作中有一类比较容易犯的错误--指针地址未进行正确的更新赋值就加以使用,这往往会造成很严重的后果(对内存区进行错误的涂抹)。所以一个良好的习惯是,当一个指针的工作稍事休息,先把它赋值为NULL,待到再度使用时,重新对其赋值以及进行指针类型转化。
前面说到"NULL指针无法再进行任何数据访问",其实是视编译器功能而定的。0位置指向的是程序起始,对于不同的编译器,NULL指针的操作结果是不同的:有些是不准读写,有些是只读,甚至读写都允许。编译器是人定的。本回答被网友采纳
第2个回答 2018-05-25
C语言NULL定义,定义如下:
#undef NULL
#if defined(__cplusplus)
#define NULL 0
#else
#define NULL ((void *)0)
#endif
所以我觉得,如果一个指针被赋予NULL,应该就相当于这个指针执行了0x0000这个逻辑地址,但是C语言中0x0000这个逻辑地址用户是不能使用的(有些人说是因为0x0000没有映射到物理地址,也有人说是因为0x0000映射到的地址是操作系统用于判断野指针的,我也不太懂,总之就是用户不能使用啦),所以当你试图取一个指向了NULL的指针的内容时,就会提示段错误,听着有点绕,看程序:
int *node=NULL;
int a=0;
a=*node;
printf("%d\n",a);
由于node执行的是NULL,也就是逻辑地址0x0000,而这个地址用于是不能访问的,所以编译器提示段错误。
第3个回答 2008-06-19
NULL的定义是:
#define NULL (*(void*)0)
简而言之就是一个打包过的0.
while后面应该填写
'\0' != *p
因为按照习惯,*p是一个字符变量.
但是你填
NULL != *p
或者就是
*p
都可以.
第4个回答 2008-06-19
指针可以赋值null,但数值只能赋值为0.*p是表示指针P指向内存块中的值。所以不能赋值给null。null不相当于0.
'\0'就更不是了。它是表示什么也没有。例如指针被赋值了null表示这个指针没有指向任何地址。在C++中指针可以赋值为0,表示为NULL。而0表示个数值在C中。
这个代码while() 这里好像有错误。