Chinaunix首页 | 论坛 | 博客
  • 博客访问: 426734
  • 博文数量: 103
  • 博客积分: 5010
  • 博客等级: 大校
  • 技术积分: 971
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-11 17:22
文章分类
文章存档

2008年(77)

2007年(26)

我的朋友

分类: C/C++

2007-12-13 00:27:31

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型指针可以赋值给任意型指针。
阅读(1392) | 评论(0) | 转发(0) |
0

上一篇:直接插入排序

下一篇:堆排序代码

给主人留下些什么吧!~~