C++中的空指针

smi*_*dha 2 c++ pointers

在C++中,我声明一个空指针int* p=0,这是否意味着零是整数指针类型的一些特殊常量,或者它是否意味着p指向地址0x0?当然,因为它0x0必须是C++在分配变量/数组时从不接触的特殊地址.

bdo*_*lan 9

C++标准定义整数常量0转换为空指针.这并不意味着空指针指向地址0x0.它只是意味着当转换为指针时,文本"0"变为空指针.

当然,使得空指针具有除了0x0相当复杂之外的表示,因此大多数编译器只是让0x0空指针地址并确保在零处分配任何内容.

请注意,使用此零转换被视为不良样式.使用NULL(这是一个预处理器宏定义为0,0L或者其他一些零整数常量),或者,如果你的编译器足够新以支持它,nullptr.

  • 使用零并不是一致被认为是坏的风格.有些人认为宏版本更糟糕. (5认同)
  • @Praetorian我并不认为NULL更好或更差.我只是说问题没有解决,所以不应该这样描述.希望`nullptr`将使'争议'结束. (3认同)