【指针之高级篇】
基于上篇的理解,再继续深入学习下指针。
1. 指向指针的指针
既然指针也是占据内存空间的,那指针也就是有地址的了,那么对于指针的地址又是存放到哪里呢?——指向指针的指针。
首先假设程序中有这样一个变量:int weight = 60;
那么指向该int类型数据的指针的定义:int *pWeight = &weight;
指向pWeight的指针(指向指针的指针)定义:int **ppWeight = &pWeight;
ppWeight 就是指向了一个指针的指针,它本质还是一个指针,那么它仍旧是占用4个字节内存,这4个字节内存中存放着pWeight的首地址,知道了这些,那么指针的指针的指针也就一次类推即可。
2. 指针和数组名的关系
这个问题老生常谈,其实他们之间没有本质的联系,只不过从使用方法上看非常类似,故有了一批批前仆后继者比对进行研究,因为还是总有很多童鞋在这里有疑惑,这里简单说明下:
假设程序中定义了:
Int array[5] = {1, 2, 3, 4, 5};
Int *pArray = &array[0];
那么,
a. 数组名array本身没有专门内存来存储,他是依附于数组而存在的,是数组的一个名字;而指针是系统的一个专门的数据类型,指针变量pArray是有内存来存储的;
b. 具体在使用其进行内存寻址的时候则基本是一样的,按照定义pArray指向了数据array的首地址也就是首个元素的首地址&