章节
问答
课签
笔记
评论
占位
占位

C++ 中的空指针

我们之前的课程中曾经讲过空指针的问题,知道在 C++ 中,有使用 NULL 和 nullptr 两种方式表示空指针的方法。

int * p = NULL;
int * p = nullptr;

这一小节来看看两者的区别。

NULL

首先看 NULL,在 C++ 中,NULL 其实就是 0。

例如:

int * p = NULL;

等价于:

int * p = 0;

因为在 C++ 中,0 地址通常是被保护起来的,不可访问的。因此用 0 地址来指代这个指针哪里都不指,是可以的。但是这里面却存在一些问题。因为 NULL 就是 0,所以我们可以把 NULL 用在其他地方。

例如:

int a = NULL;

我们可以将一个 int 变量赋值成 NULL,你永远无法阻止有人这么干。而在某些情况下,甚至会在不经意间酿成惨剧。

例如:

class A
{
public:
    void func(void * t)
    {
    }

    void func(int i)
    {
    }

}

这个类中,func 函数有两个重载。这个时候,我们尝试用 NULL 调用一下:

int main(int argc,char **argv)
{
    A a;
    a.func(NULL);

    return 0;
}

猜猜这个函数到底调用的哪个重载?

nullptr

正是由于 NULL 会导致这样的混乱,所以在 C++11 标准之后,C++ 标准委员会为 C++ 添加了 nullptr 关键字。我们可以将 NULL 赋值给一个普通变量,而 nullptr 却不能。

int a = nullptr;

这样是会直接报错的。

nullptr 只能赋值给指针,所以不会有 NULL 那样的问题。

所以,只要你的编译器兼容 C++11 标准,那么你应该使用 nullptr。

任务

?不会了怎么办
||

提问题

写笔记

公开笔记
提交
||

请验证,完成请求

由于请求次数过多,请先验证,完成再次请求

加群二维码

打开微信扫码自动绑定

您还未绑定服务号

绑定后可得到

  • · 粉丝专属优惠福利
  • · 大咖直播交流干货
  • · 课程更新,问题答复提醒
  • · 账号支付安全提醒

收藏课程后,能更快找到我哦~

使用 Ctrl+D 可将课程添加到书签

举报

0/150
提交
取消
全部 精华 我要发布
全部 我要发布
最热 最新
只看我的

手记推荐

更多

本次提问将花费2个积分

你的积分不足,无法发表

为什么扣积分?

本次提问将花费2个积分

继续发表请点击 "确定"

为什么扣积分?