这一节中,我们讨论指针与多维数组的关系。 在开始之前,我们再次回忆一下什么是多维数组。
1.声明数组
数组由一系列类型相同的数据对象依次排列组成的复合结构。那么声明数组至少要提供三类参数。
- 数组名。
- 数组元素的类型。
- 数组元素的数量。
数组声明的公式:
根据公式我们来写几个数组的声明。
例如,一个数组A,它的元素为int类型,元素数量为10个。
- 数组名:A
- 数组元素的类型:int
- 数组元素的数量:10
数组A的声明如下:
int A[10];
在声明中,去掉变量名和分号,即可得到数据类型。数组A的类型为int [10]。
假设,另外有一个数组B,它的元素类型为数组int [10],元素数量为5个。
- 数组名:B
- 数组元素的类型:
int [10] - 数组元素的数量:5
组合这3个要素,写出如下声明:
int[10] B[5];
还差一点,数组名左边的方括号都移到最右边来。下面才是数组B的正确声明。
int B[5][10];
数组B的类型为int [5][10]。
通用数组声明公式:

数组声明至少有一个[元素个数]。
访问数组A的最基本元素,需要提供一个下标即可,例如A[x]。
访问数组B的最基本元素,首先需要提供一个下标B[x],访问其中的元素。但是,其元素也是一个数组,所以需要再提供一个下标。例如B[x][y],即可访问到B中的最基本元素。
由于数组A仅需要一个下标,所以被称为一维数组。
而数组B需要两个下标,逻辑上可以看做一个二维矩阵,所以被称之为二维数组。
2.数组名的转换规则
我们可以通过数组名来取得一个数组的首地址,数组名与首地址的联系如下:
当数组名arr出现在一个表达式当中,数组名arr将会被转换为指向数组首元素的指针。但是,这个规则有两个例外:
- 对数组名arr使用sizeof时。
- 对数组名arr使用&时。