为什么可以打印空指针的值,但不能打印未初始化指针的值?我的意思是,当将指针初始化为nullptr时,你只是明确地让指针指向了一个不存在的位置,对吧?如果是这样,那不初始化它岂不是一样吗?还是我错过了什么?感谢!非常感谢!
指针(类型为T
)是一种值,类似于其他值,例如整数或字符串,它可以处于以下三种状态之一:
它可以指向对象或一个对象的后面(两者不排斥),或者指向一个函数。如果指向对象或函数,则可以对该指针进行间接引用。
它可以具有特殊值“null”,在这种情况下,它与T()
、nullptr
以及其他表达式(如0
、NULL
、T(0)
和T(nullptr)
)相等。
它可能是以上任何一种都不是。这适用于未初始化的T
类型变量的值,但永远不适用于T
的prvalue。如果指针曾经指向一个对象但该对象的生命周期已结束,也会发生这种情况。
请注意,只有第二种情况(空指针)是可以通过编程方式检查的!你通常无法确定非空指针是否有效(除了将指针与一组已知的有效指针进行比较的情况外)。
nullptr
”。 - Kerrek SBnullptr
意味着无处可指,这是可以接受的!将指针初始化为此定义值是一个很好的习惯。
但如果未初始化,则它可能指向任何地方,这是未定义的,并且可能导致未定义的行为。
if( pointer == garbage ) { pointer = someMeaningfulValue; }
,因为你不知道垃圾值是什么,无法进行比较。你无法重现它。pointer = NULL;
,你已经用一个预先知道的值(代表“指向空”)初始化了指针,所以你可以稍后安全地执行if( pointer == NULL ) { pointer = someMeaningfulValue; }
。
nullptr
值的指针确实“指向无处”,并且没有任何“随机”或“垃圾”值。那些具有“随机”或“垃圾”值的指针实际上是不确定的,并且不能被视为任何内存地址。 - Lightness Races in Orbit