最开始,我也是一个“谈指针色变”的人,但是经过一系列学习,我开始真正认识指针,并将我的学习成果发布在这里,期待与诸君交流。
一、指针是什么
要知道指针是什么,我们先要了解内存。我们知道,内存被划分成很多个小空间,用来存储不同的内容,就好像酒店的一个个小房间。酒店房间有编号便于客人们寻找,我们的每个内存空间也都有自己的编号,我们称其为“(内存)地址”。
指针(也叫指针变量)的作用,就是存储这些“地址”。
因此我们说:指针是用来存放内存地址的变量。
二、指针大小和指针类型的意义
既然知道指针是用来存放地址的变量,那么我们对指针变量的大小都是一样的这个事实认知起来就不会太难。事实上,在32位机器上,指针(变量)的大小一般为4个字节,而在64位机器上,指针(变量)的大小一般为8个字节。
或许我们会有疑问,既然指针变量的大小相同,那么指针类型的存在意义又是什么。
这里我们很肯定的回答,指针类型的存在是有意义的。
意义一:指针类型决定了指针的解引用的权限有多大。
意义二:指针类型决定了指针走一步有多远(指针的步长多大)。
三、野指针
我们知道指针了指针存在的意义:指向一片内存空间。那么野指针的意义也不难理解,就好像“野狗”这个词,没有主人的狗是野狗,同样的,指向意义不可知的指针,我们就将其称为野指针。
野指针在我们的代码中非常危险,一般来说,我们要规避代码中产生野指针的风险。
一般来讲,产生野指针的情况主要有如下几种:
1、指针变量没有初始化;
2、指针越界访问;
3、指针指向的空间已释放。
那我们要如何规避野指针呢,具体也有如下几种方法:
1、指针初始化;(我们定义指针的时候,最好提前对其进行初始化,如果你实在不知道初始化为什么,可以将指针初始化为NULL)
int *pa = NULL;//指针初始化的例子
2、小心指针越界;
3、避免指针指向的空间为已释放的空间;
4、指针使用之前先检查有效性;