指针与数组
在C++中,指针与数组有着非常紧密的联系。
数组有一个特性:在很多用到数组名字的地方,编译器都会自动地将其替换为一个指向数组首元素的指针:
String *p = nums; // 等价于 p = &nums[0];
在大多数表达式中,使用数组类型的对象其实是使用一个指向该数组首元素的指针。
以上的描述还是有点难以让人理解,那么我们接下来更仔细地说明一下指针与数组之间的联系
首先,是它们的定义
数组与指针的定义
数组:数组是存放有限个相同类型数据的对象的容器,数组在内存中所占的大小由数组长度及成员类型的大小决定。
指针:指针就是具有某种数据类型的存储单元的地址,即指针变量保存的值是某一块内存的地址。32位系统下占4个byte(64位系统占8个byte)。
从定义上来看,指针和数组好像没有什么联系,但事实上数组所存储的数据对象本身并没有名字,需要通过其所在的位置进行访问。
在C语言中,一个数组的名字所代表的是一个数组的起始地址,数组名字所代表的值即为数组第一个元素的地址。
例如在一个数组名为a,数组长度为n的数组中,a 和 &a[0] 都表示数组第一个元素的地址。所以一个数组名可以看作是一个指针常量,这个指针常量指向数组的第一个元素(即这个指针常量的值就是数组第一
个元素的地址)。因此,当我们在对数组成员进行访问时就可以利用数组名下标和指针访问两种方式。