NULL的定义:
cat /usr/include/linux/stddef.h/usr/include/linux/stddef.h
#ifndef _LINUX_STDDEF_H
#define _LINUX_STDDEF_H
#undef NULL
#if defined(__cplusplus)
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif
NULL和 '\0'到底有什么区别
ANSI组织将NULL的定义从stdio.h移到了stddef.h,在用到NULL时,你要么在开头加stddef.h,要么直接定义NULL。
#ifndef NULL
#define NULL (void *) 0
#endif
'\0'是ASCII码字符串的最后一个字符,跟NULL没有关系。
估计楼大是想问NULL与0(零)的关系,NULL是(void *) 0,而不是零。
note:NULL也可以被重新定义,你在开发程序时最好不要重新定义它。
如果NULL已被重新定义,也就是说不再是(void *) 0了,你最好定义一个NULL_PTR来代替你本来想用的NULL。
1、用(ptr == NULL)或(NULL == ptr)是正确的,建议用后一种,因为NULL是常量,如果你错写成NULL = ptr,编译器会报错,否则可能不包错。
2、(!ptr)最好只针对布尔变量用,这在林锐的《高质量c++编程》中有说明。
3、char * ch;
ch= NULL;
是正确的。因为ch是个指针,而void型指针可以赋值给任意型指针。
阅读(1430) | 评论(0) | 转发(0) |