NULL其实是一个宏,定义为0,#include <stdio.h> 里是:
#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif
#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif
判断指针是否为空时,p==NULL, 或p==0是一样的意思,但习惯用NULL更好。
后面的空格(' ')与'0','\0'主要是在字符串中容易混淆,可以通过ASCII码值来帮助区分:将所有的字符译为ASCII码值,
空格(' ')--->32
'0'-------->48
'\0'------->0
C库里字符串的处理是按ASCII码值来处理的,例如以'\0'值结束,就是以0值结束,所以p是字符指针,p[i]='\0'与p[i]=0或p[i]=NULL都是一样的,都可以作为字符串结束标志。(memset(p, 0, N)与memset(p, '\0', N)与memset(p, NULL, N)都是一样的。)
理解了这些,那么'0',空格(' ')就不会混淆为结束标志了,它们与普通字符没什么区别。