我今天想知道可以为指针分配一个整数0,即像分配NULL一样。直到今天我才假设,这是C ++的新功能。这从一开始就是C的一个特征,还是因为最近的语言标准而放松了?
答案 0 :(得分:7)
Per The C Programming Language by Kernighan and Ritchie,1978,第192页:
但是,保证将常量0赋值给指针将产生一个空指针,该指针可与指向任何对象的指针区分开。
在此之前,我无法谈及历史。
答案 1 :(得分:4)
根据C标准(6.3.2.3指针)
3 值为0 的整数常量表达式,或者这样的 表达式转换为void *类型,称为空指针 常量 .66)如果将空指针常量转换为指针 类型,保证结果指针,称为空指针 比较不等于指向任何对象或函数的指针。
答案 2 :(得分:0)
在K& R第一版(ANSI之前的版本),第97-98页,我们有一些示例代码:
#define NULL 0 /* pointer value for error report */
" C保证没有有效指向数据的指针将包含 零,所以返回值为零可用于发出异常事件的信号......但是,我们写入NULL而不是零,以更清楚地表明这是指针的特殊值。通常,整数不能有意义地分配给指针。"
显然,此处0
,因此NULL
,不是作为指针而是int
。值得注意的是,void *
直到第2版(ANSI)才被引入。