数组的概念自然不必多说,根据维度不同,数组名的类型就不同。先从最简单的一维数组讲起:
1、一维数组
int array[3]
,此时定义了含有 3 个元素数组,此时 array 的类型 int*,即指针类型。
array 作为指针变量,指向数组的第一个元素 array[0]
,该表达式与 *array
等价,同理数组的第二个元素array[1]
与*(array+1)等价。
2、二维数组
int array[3][4]
,对于一维数组,曾经年少无知的我一度认为array也是 int*
类型,其实不是,array其实是一维指针数组,int (*p)[4]
,array 的类型与p等价,p=array
。使用以下代码初始化二维数组 array。
int num = 1;
for(int i=0; i<3; i++){
for(int j=0; j<4; j++){
array[i][j]=num++;
}
}
// 初始化之后,array的内容如下
1 2 3 4
5 6 7 8
9 10 11 12
二维数组array 由 3 个一维数组组成,分别是 array[0],array[1],array[2],这 3 个元素保存在 array 指针数组里。
array[0] 为 array[0] 第 1 个元素的地址,1的地址
array[1] 为 array[1] 第 1 个元素的地址,5 的地址
array[2] 为 array[2] 第 1 个元素的地址,6 的地址
好像有点废话,不过array 本身可看作一个一维数组,它的元素为多个一维数组的首地址。
*array[0] = 1; 等价于 **array
*array[1] = 5 等价于 **(array+1)
*array[2] = 9 等价于 **(array+2)
3、三维数组
int array[3][2][2]
,array 包含 3 个 二维数组,每个二维数组都包含 2 个一维数组。说明 array 的类型为二维指针数组,它的每个元素指向一个二维数组。
使用以下代码初始化该三维数组:
int id = 1;
for(int i=0; i<3; i++){
for(int j=0; j<2;j++){
for(int k=0; k<2; k++){
array[i][j][k] = id++;
}
}
}
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 2; j++)
{
for (int k = 0; k < 2; k++)
{
cout<< array[i][j][k]<<" ";
}
cout<<endl;
}
cout<<endl;
}
// array 的内容如下
1 2
3 4
5 6
7 8
9 10
11 12
array[0] 指向 二维数组
1 2
3 4
*array[0][0]
指向 1 2
*(array[0][0]+1)
指向 1
*(array[0][0]+2)
指向 2
*array[0][1]
指向 3 4
*(array[0][1]+1)
指向 3
*(array[0][1]+2)
指向 4