开启掘金成长之旅!这是我参与「掘金日新计划 · 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 = 10;
int* p = NULL;
int** 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 天,点击查看活动详情