将0 vs NULL分配给C中的指针

时间:2018-01-16 19:05:59

标签: c null-pointer

我今天想知道可以为指针分配一个整数0,即像分配NULL一样。直到今天我才假设,这是C ++的新功能。这从一开始就是C的一个特征,还是因为最近的语言标准而放松了?

3 个答案:

答案 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)才被引入。