1. NULL [nʌl] 是一个宏,其定义为空指针,位于stdio.h中。
#ifndef NULL
#define NULL ((void*)0)
#endif
作为一个特殊的指针变量,其不指向任何东西。
实际上NULL的字面值常量为0,然后被强制转换为空指针类型。之所以定义成NULL,本人觉得主要是为了方便识别。比如下面这个例子,它可以提醒我们malloc返回的指针值是否有效。(条件判断可防止对返回的空指针进行解引用)
int *ptr=0;
ptr = malloc( 100 );
if( ptr == NULL ){
printf( "Out of memory! \n" );
exit (l);
}
指针变量ptr在定义时可以初始化为0地址,因为对计算机的物理内存来说,0地址是一个特殊的地方,其不能被访问,并且相当敏感,如果对它进行姐引用,会出现segment fault(至少我的机器会这样),如下:
int main(int argc, char **argv)
{
char *ptr=0;
printf(": %d\n",*ptr);
return 0;
}
2. NUL 也是一个宏,为 '\0' 字符的别名(可以读做妞)
#ifndef NUL
#define NUL '\0'
#endif
3. '\0' 是ascii字符集的一个转义字符,因为其在内存单元中的值为0,所以一般用作字符串的结尾,占一个字节。例如:
char arr[3]={'h','i','\0'};
char arr2[3]={'h','i', 0 }; //same as arr
char arr3[3]="hi"; //此处的"hi"是初始化列表,不是字符串常量,记住喔
4. '0' 是ascii字符集的一个打印字符,编码后在内存单元中的值为48
5. 0 字面值常量0,在内存单元中的值为0。其霸占的内存单元个数由类型决定(默认为int型)
参考https://baike.baidu.com/item/%E7%A9%BA%E6%8C%87%E9%92%88%E5%B8%B8%E9%87%8F/9796145
<完>