首先,我们又要提出一个枯燥且无心意的问题,指针是什么?对于有一点C语言的指针基础的小伙伴会说指针就是地址,但是这样会使刚开始学的小伙伴存在很多疑问,地址又是什么?所以,为了使小伙伴们加深对于指针的理解,下面我会用更好理解的叙述来解释各类指针的意义。
一.对于指针的自我理解
首先,我们在学习c语言的时候如果想将一个数存入计算机,我们会在程序里定义一个类型变量,可以是int,char,double等等,下面我以定义一个int 类型的变量当做例子。当我在程序中写 int a;时,计算机会给这个变量分配一个地址,当然,这里的地址也只是人为规定的,计算机真正是没有哪个内存单元对应哪个地址的,如果小伙伴们不太理解地址的概念,我们可以把我们住的楼房理解为一块内存条,而每一层的房间号相当于就是我们认为规定的地址,这样,每一层这样依次顺序排列就组成了一栋楼房,而在内存里每一个地址也是大概这样排列,只是不是顺序的排列,因为这里最基本单位是一个字节,所以会跳过一个或多个字节,不同的数据类型所占空间大小不一样当然跳过的地址大小也不一样,就以我下面举的一个整形数组的例子来解释。
从这里我们可以看出,由于int 类型的变量在内存中开辟4个字节的大小来存储,所以,这里数组中a[0]与a[1]的地址相差了四个字节。
这里想必大家也就知道了其他类型的变量的存储大小与其地址的关系了。
而后面的指针其实就是定义了一个变量,然后计算机也给它开辟了一个空间,但是这里存储的东西与之前常见的数据类型不同,这里存储的是一个地址,比如我定义一个int a;那么我在定义一个int* p;
然后p=&a;这样p里面存的就是a这个变量的地址了。所以这里的指针p也可以想象成一个特殊的变量,它也就自己的一个地址,它的地址也就是二级指针。下面用对应程序来演示