无效* p = 0L有效吗?

时间:2010-12-24 15:39:08

标签: c

this answer中,sassman使用以下内容初始化指针:

zend_class_entry* ce = 0L;

我的问题是 - 这有效吗?我会说它不是,用空指针初始化变量,或者是一个未经修饰的(并且可能被转换为  应使用void *0常量或一些评估为NULL的宏。

但是,我无法在支持此解释的标准中找到确定的语言。它只是说:

  

一个整数常量表达式,其值为0,或者这样的表达式强制转换为类型   void *,称为空指针常量

3 个答案:

答案 0 :(得分:8)

0L是一个整数常量表达式,其值为零。当用作指针时,这样的常量表达式是空指针常量。这正是你引用的句子所说的(C99 6.3.2.3/3):

  

值为0的整型常量表达式,或者类型为void *的表达式,称为空指针常量。

紧接着是一个声明,可以将空指针常量转换为空指针:

  

如果将空指针常量转换为指针类型,则保证将结果指针(称为空指针)与指向任何对象或函数的指针进行比较。

为什么你认为0不能用作空指针常量?

答案 1 :(得分:2)

绝对具有零值的任何整数常量表达式将被编译器视为空指针常量。 0L是一个完全有效的空指针常量,因此代码绝对有效。

答案 2 :(得分:-3)

您可以将所有内置POD类型设置为文字常量0而不进行强制转换。