这一节中,我们讨论指针与多维数组的关系。 在开始之前,我们再次回忆一下什么是多维数组。
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使用&时。