3.4.4 多维数组在内存中是如何排列元素的

    维数决定了数组中元素的组织方式及访问元素说用的下标个数,从本质上讲,所有的数组在内存中都是一维线性的。以二维数组为例,内存中是先放第一行的元素,再放第二行的元素,依次类推。下面给出了大小为3×4的二维数组A的排列顺序。


    A[0][0]->A[0][1]->A[0][2]->A[0][3]-> A[1][0]->A[1][1]->A[1][2]->A[1][3]-> A[2][0]->A[2][1]->A[2][2]->A[2][3]

    多维数组的存储方式与此类似,可以将下标看成是一个计数器,像计数的万位、千位、百位、十位和个位一样,右边的下标(靠后的下标)是低位,每一位都在上下界间变化,变化的范围是0到声明时指定的下标值减1,当某一低位计数器超出范围时(达到声明时指定的下标值),左边下标加1,同时该低位计数器及其右边的更低位计算器置0(回到下界)。这样,最左边一维下标变化是最慢的,最右边一维下标变化最快,下面给出3×3×3的三维数组B中元素在内存中的排列顺序。


    B[0][0][0]->B[0][0][1]->B[0][0][2]-> B[0][1][0]->B[0][1][1]->B[0][1][2]-> B[0][2][0]->B[0][2][1]->B[0][2][2]-> B[1][0][0]->B[1][0][1]->B[1][0][2]-> B[1][1][0]->B[1][1][1]->B[1][1][2]-> B[1][2][0]->B[1][2][1]->B[1][2][2]-> B[2][0][0]->B[2][0][1]->B[2][0][2]-> B[2][1][0]->B[2][1][1]->B[2][1][2]-> B[2][2][0]->B[2][2][1]->B[2][2][2]->

    由于多维数组在内存中是线性存储的,元素存放的顺序也是确定的。在声明一个数组的同时对其进行初始化时,也可以采取下列形式(以二维数组为例)。


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

    技巧仍旧推荐前面介绍的按行初始化的方式,那样更直观、通用。