C语言--NULL和NUL

1、NULL
    标准定义了NULL指针,它作为一个特殊的指针变量,表示不指向任何东西。要使一个指针变量为NULL,你可以给它赋一个零值。为了测试一个指针变量是否是NULL,你可以将它与零值进行比较。
    对指针进行解引用操作可以获得它所指向的值。但从定义上来看,NULL指针并为指向任何东西,因此对一个NULL指针进行解引用操作时非法的。在对指针进行解引用操作之前,你首先必须确保它并非NULL指针。
    如果所有的指针变量(而不仅仅是位于静态内存中的指针变量)能够被自动初始化为NULL,那实在是一件幸运的事,但事实并非如此,不管你的编译器对解引用NULL指针这种行为作何反应,对所有的指针变量进行显示的初始化是一种好做法。如果你已经知道了指针将被初始化为什么地址,就把它初始化为该地址,否则就把它初始化为NULL。风格良好的程序会对指针解引用之前对他进行检查。
2、NUL
    NUL是ASCII字符集中第一个字符的名称,它对应于一个零值。C语言中没有NUL这样的预定义宏。注意:在ASCII字符集中,数字0对应于十进制值48,不要把数字0和'\0'(NUL)的值混同起来。
    字符串就是一串零个或多个字符,并且以一个位模式全0的NUL字节结尾。因此,字符串所包含的内部不能出现NUL字节,NUL字节是字符串的终止符,但它本身并不是字符串的一部分,所以字符串的长度并不包括NUL字节。
3、总结:
    一个‘L’的NUL用于结束一个ASCII字符串,
    两个‘L’的NULL用于表示什么也不指向(空指针)
    当然,如果出现了三个‘L’的NULLL,那就要检查一下有没有拼写错误了。ASCII字符中的’\0’被称为NUL。表示哪里也不指向的特殊的指针值则是NULL。这两个术语不可互换。

符号NULL在头文件stdio.h中定义,另一方面,并不存在预定义的符号NUL,所以如果你想使用它而不是字符常量'\0',你必须自行定义。
 

猜你喜欢

转载自blog.csdn.net/tyustli/article/details/86485408
今日推荐