C/C++中的NULL
来源:互联网 发布:核辐射测量仪 淘宝 编辑:程序博客网 时间:2024/04/30 20:33
NULL表示空指针,用于表示一个无效的指针,它的值为0(早期C语言的实现中可能有非0空指针,现在已经不用)。对指针置NULL即标记指针无效,可以通过判断指针是否等NULL而防止指针的非法访问。
NULL在C/C++标准库中被定义为一个宏,一般为:
#define NULL ((void*)0) /*C中的“标准”写法,NULL被替换为一个void*类型的指针右值,值等于0;由于是void*类型,可以隐式转化为其它类型的指针。*/
#define NULL 0 //C++,相对C简化定义的原因是C++中void*无法自由隐式转换为其它类型的指针,而字面量0可以隐式转换为指针类型;尽管它实际上可以被作为整数0使用而不引起编译问题,但要注意,从设计目的上而言,NULL应当总是只作为空指针使用。
char c = NULL相当于char c = 0,也就是把c初始化为0。0在这里并不是空指针的意思,而是隐式转换成的字符'/0'——值为0的char字符。在C/C++的一般实现中,这样的行为(值为0的数值类型,无论是void*或int,转换为char的值还是0)是明确的,但这种用法并不恰当。一如LS的错误,ASCII及兼容字符集中数值0对应的字符为null character(null terminator),应该用NUL(没有在标准库中定义,语言中char类型用'/0',wchar_t类型用L'/0')而不是NULL表示。NUL的一个重要应用是作为C风格字符串的结尾标志字符。----(
NULL在C/C++标准库中被定义为一个宏,一般为:
#define NULL ((void*)0) /*C中的“标准”写法,NULL被替换为一个void*类型的指针右值,值等于0;由于是void*类型,可以隐式转化为其它类型的指针。*/
#define NULL 0 //C++,相对C简化定义的原因是C++中void*无法自由隐式转换为其它类型的指针,而字面量0可以隐式转换为指针类型;尽管它实际上可以被作为整数0使用而不引起编译问题,但要注意,从设计目的上而言,NULL应当总是只作为空指针使用。
char c = NULL相当于char c = 0,也就是把c初始化为0。0在这里并不是空指针的意思,而是隐式转换成的字符'/0'——值为0的char字符。在C/C++的一般实现中,这样的行为(值为0的数值类型,无论是void*或int,转换为char的值还是0)是明确的,但这种用法并不恰当。一如LS的错误,ASCII及兼容字符集中数值0对应的字符为null character(null terminator),应该用NUL(没有在标准库中定义,语言中char类型用'/0',wchar_t类型用L'/0')而不是NULL表示。NUL的一个重要应用是作为C风格字符串的结尾标志字符。----(
- C/C++中的NULL
- C/C++中的NULL
- NULL在c 中的含义
- 关于c语言中的NULL
- NULL在C和C++中的定义
- C 中的getline函数需要=NULL.
- C\C++中的NULL的用法
- C ++中的NULL与nullptr的区别
- c语言中的null 和0
- C语言中的'\0',0,NULL
- C/C++中的NULL与nullptr
- c语言中的'0','NULL'以及'\0'
- asp.net(C#)中的DBNull、Null、String.Empty等
- C语言中的空指针、空指针常量、NULL & 0
- C语言中的空指针、空指针常量、NULL & 0
- C语言中的空指针、空指针常量、NULL & 0
- c/c++中的NULL和0的区别
- 关于NULL在C和C++中的区别
- 解决语法解析类问题的利器
- C语言的变量的内存分配
- GTD:是一种态度
- mapreduce如何使用本地文件
- Python多进程并发(multiprocessing)
- C/C++中的NULL
- 统计UV和PV
- IOS中RSA的加密解密
- 给学嵌入式的朋友几点建议
- XCODE工程名称与想要的APP名称 不一样怎么办?/修改APP 名称
- Helix server相关
- 高层经理监控项目的十一种思维模式
- C# 在自定义线程中采用系统委托方式操作主窗体线程控件的方法
- sql server 还原数据库时提示数据库正在使用,无法进行操作的解决方法