C++指针基础03

86 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 4 天,点击查看活动详情

空指针

由上一节我们知道,当使用指针时,可能会出现野指针导致程序崩溃,而空指针就是解决野指针的方式。

空指针是一个特殊的指针,他不指向任何地方。所以我们可以推断出,任何一个有效的指针与空指针进行相等判断时,结果都是false。

我们在初始化一个指针时,如果不知道该指向哪里,为了程序以及代码继续进行下去,可以先用空指针。形式为:int* p = NULL

在我们判断指针是否为空时,通常使用if(p != NULL)而不是if(p)
这是因为在C++的定义中,NULL就是0,而我们的true为≠0,那么此时,if(p)if(p != NULL)等效。

为了避免野指针的出现,我们可以用以下的判断语句将指针赋为空指针。

if(p != NULL) {
delete p;
p = NULL;
}

delete关键字在之后会有介绍,可以先略过,重点在用if语句将指针赋值为空。

指向指针的指针

顾名思义,指向指针的指针,意思就是该指针指向的是另外一个指针,也就是一个指针链。

一般来说,指针指向的是另一个变量的地址。而指向指针的指针,就是第一个指针包含着第二个指针的地址,而第二个指针包含着所需变量的地址。通过这一方法,可以达到间接寻址的成果。

也就是我们的管理员拥有另一个管理员的房间钥匙,它可以打开这个管理员的房间从而看到住客的东西。

下面的例子声明了一个指向指针的指针,通过间接寻址获得所需变量的值。

int val = 10int* p = NULLint** pp = NULL;
//获取val的地址给第二个指针
p = &val;
//将第二个指针的地址传给第一个指针
pp = &p;

cout << "val的值为:" << val << endl;
cout << "*p的值为:" << *p << endl;
cout << "**pp的值为:" << **PP << endl;

当代码执行完成后,结果输出:

val的值为:10
*p的值为:10
**p的值为:10

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 4 天,点击查看活动详情