4.3 多维数组的定义及引用

讲解完了一维数组和二维数组,接下来看看多维数组,其定义的一般形式为:


类型说明符数组名[常量表达式1][常量表达式2][常量表达式3]……;


在此以三维数组为例来进行讲解,定义一个三维整型数组int arr[2][3][4],将其视为由arr[2][3]和int[4]两部分所组成,arr[2][3]为一个二维整型数组,数组中的每个元素都是一个含有4个整型元素的一维数组。按照同样的方法,将arr[2][3]视为由arr[2]和int arr[3]两部分所组成,arr[2]为含有两个元素的一维数组,元素的类型为int[3],即每个元素都是含有3个整型元素的一维数组,如图4-7所示为arr[2][3][4]的结构。

4.3 多维数组的定义及引用 - 图1

图 4-7 三维数组arr的结构

三维数组中元素的个数为第一维长度×第二维长度×第三维长度,数组元素同样存储在一片连续的内存单元中,存储方式与二维数组非常类似。一维数组的存储是从下标为0的元素开始,按照下标递增的顺序,直到下标为数组长度减1,一维数组的下标能够很好地显示出数组元素在内存中的存放次序。如果将在内存中存储的三维数组视为一个一维数组,那么三维数组元素的存储次序就可以用一维数组的下标来描述,内存中存储的三维数组的任意一个元素arr[m][n][k]可以转换为与之相对应的一维数组元素arr[mNK+n*K+k],其中,N为第二维的长度,K为第三维的长度,而m、n、k分别为第一维、第二维、第三维的下标。三维数组占用的内存大小为数组类型所占用的内存大小乘以它所含元素的个数。三维以上数组的分析与此类似,将其逐层拆分开进行分析即可,在此不再做过多讲解。下面通过一段简单的代码来学习三维数组的定义和引用。


include<stdio.h>

define M 2

define N 3

define K 4

void main(void)

{

int i,j,k;

int arr[M][N][K]={1,2,3,4,5,6,7,8,9,10,11,12};

int a[MNK];

for(i=0;i<M;i++)

{

for(j=0;j<N;j++)

{

for(k=0;k<K;k++)

{

printf("arr[%d][%d][%d]=%d\t",i,j,k,arr[i][j][k]);

}

printf("\n");

}

printf("\n");

}

return;

}


运行结果:


arr[0][0][0]=1 arr[0][0][1]=2 arr[0][0][2]=3 arr[0][0][3]=4

arr[0][1][0]=5 arr[0][1][1]=6 arr[0][1][2]=7 arr[0][1][3]=8

arr[0][2][0]=9 arr[0][2][1]=10 arr[0][2][2]=11 arr[0][2][3]=12

arr[1][0][0]=0 arr[1][0][1]=0 arr[1][0][2]=0 arr[1][0][3]=0

arr[1][1][0]=0 arr[1][1][1]=0 arr[1][1][2]=0 arr[1][1][3]=0

arr[1][2][0]=0 arr[1][2][1]=0 arr[1][2][2]=0 arr[1][2][3]=0


由上面的运行结果可知,三维数组元素的引用与之前讲解的一维数组和二维数组非常类似,都是通过数组名和下标来对数组元素进行操作。三维数组的初始化方式也与二维数组类似,在此就不再详细讲解了。