【C++初阶】:指针空值nullptr

指针空值nullptr

  • 一.空指针
  • 二.空指针nullptr

一.空指针

在良好的C/C++编程习惯中,声明一个变量时最好给该变量一个合适的初始值,否则可能会出现不可预料的错误,比如未初始化的指针。如果一个指针没有合法的指向,我们基本都是按照如下方对其进行初始化:

【C++初阶】:指针空值nullptr_第1张图片

NULL实际是一个宏,在传统的C头文件(stddef.h)中,可以看到如下代码:

【C++初阶】:指针空值nullptr_第2张图片

所以如果是这样的话NULL直接就变为了一个数字0而不是空指针,那么就有可能引起下面的麻烦。

【C++初阶】:指针空值nullptr_第3张图片

【C++初阶】:指针空值nullptr_第4张图片

这里根据函数重载(如果不了解的可以看看这篇博客函数重载),第一个和第二个函数是两个不同的函数,如果我们传NULL本意是传一个空指针调用第二个函数,但实际上在被宏替换后NULL直接变味了0,也就是调用了第一个函数,这与我们的预期不符,所以为了解决这一问题,c++开发了另一种空指针nullptr。

二.空指针nullptr

在C++98中,字面常量0既可以是一个整形数字,也可以是无类型的指针(void * )常量,但是编译器默认情况下将其看成是一个整形常量,如果要将其按照指针方式来使用,必须对其进行强转(void * )0。

所以nullptr其实可以理解为(void * )0,但需要注意nullptr的类型是空指针并不是某一种类型的指针,可以看下面的例子

【C++初阶】:指针空值nullptr_第5张图片

【C++初阶】:指针空值nullptr_第6张图片

所以nullptr实际上与(void * ) 0,任然是有区别的。

【C++初阶】:指针空值nullptr_第7张图片

你可能感兴趣的:(C++初阶,c++,开发语言)