无效*p = 0L有效吗?

Art*_*cto 2 c

这个答案中,sassman初始化一个指针:

zend_class_entry* ce = 0L;
Run Code Online (Sandbox Code Playgroud)

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

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

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

Jam*_*lis 8

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

具有该值的整数常量表达式0或此类表达式转换为类型void *称为空指针常量.

紧接着是一个语句,即空指针常量可以转换为空指针:

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

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

  • @Artefacto:它仍然是"值为0的整数常量表达式".`0`和`0L`可能有不同的类型,但它们具有相同的值. (3认同)