开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 3 天,点击查看活动详情
根据上一次的学习,我们可以把所写的项目理解成一个酒店,每个变量就是一个住客,而他们会被分到一个个房间里面,也就是每个变量所被分配到的内存地址。
而我们的指针变量,会被分配到特殊的“管理员房间”,管理员有着其他屋子的钥匙,可以访问其他住客的房间,也就是我们的指针可以访问其他变量的内存地址。
在之后我也会用这样的方式来类比,以便于初学者更好的理解。
使用指针
我们使用指针的目的就是为了提高程序的运行速度,进行动态内存分配减少程序所需内存等等。
在我们使用指针时,可以通过* 运算符来访问所指变量的内容,这一操作也被叫做解引用。
解引用的方式,就相当于我们的酒店管理员可以通过钥匙,进到住客的房间里面看到我们住客房间里的物品一样。
在下面的例子中,我们分别运用& 运算符和* 运算符对变量a进行操作。
int a = 10;
int* p = &a;
cout << "变量a的值为:" << a << endl;
cout << "变量a的内存地址:" << p << endl;
//通过解引用的方式访问指针中地址的值
cout << "指针p所指的地址的值:" << *p << endl;
上面的例子中结果输出:
变量a的值为:10
变量a内存地址:0X0011
指针p所指的地址的值:10
野指针
我们知道,指针会指向一块内存地址,可以访问这个地址所包含的内容,但是当我们的指针不指向任何一个变量地址时,我们的指针会指向一块垃圾内存,这时我们的程序会报错。也就是我们的管理员只有钥匙,而没有钥匙所对应的房间,那么这个钥匙就会成为一个"bug",造成程序崩溃。
什么时候会造成指针成为野指针呢?有以下几种情况:
- 指针变量没有进行初始化。
- 指针被free后或者是被delete后,没有设置为空指针,让人误以为这是一个合法的指针变量。
- 指针变量超越了其作用范围。
解决野指针的方法,就是空指针,在下一节将会展开。
开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 3 天,点击查看活动详情