二维数组的内存映像

半世苍凉 提交于 2020-02-07 06:49:34

6.3.3 二维数组在形式上很像一个矩阵或者一个二维的表格,例如:
int a[2][3];
可以把二维数组a的所有元素放在一个二维表中:

a[0][0] a[0][1] a[0][2]
a[1][0] a[1][1] a[1][2]

二维数组在定义后,同样系统会为它申请内存。如果是一个m*n的二维数组,需要申请m*n的内存单元,每个内存单元所需的字节数取决于二维数组的类型。例如上述的二维数组a,因为int型变量占用2个字节(Turbo C环境),那么a数组需要2*3*2=12个字节的内存。
C语言规定:二维数组元素在内存中顺序排放,排列顺序是按行存放。即先顺序存放第一行的数组元素,然后存放第二行的数组元素,依此类推。
上述的二维数组a在内存中映像为(假设系统为a分配内存的首地址为2C80):

C语言中还可以使用超过2维的多维数组。例如可以定义一个三维的数组:
int a[2][3][4];
多维数组元素在内存中的排列规则是:最左面的下标变化的最慢,最右面的下标变化的最快。上述三维数组a的数组元素排列顺序是:
a[0][0][0]=>a[0][0][1]=> a[0][0][2]=> a[0][0][3]=>
a[0][1][0]=> a[0][1][1]=> a[0][1][2]=> a[0][1][3]=>
a[0][2][0]=> a[0][2][1]=> a[0][2][2]=> a[0][2][3]=>
a[1][0][0]=>a[1][0][1]=> a[1][0][2]=> a[1][0][3]=>
a[1][1][0]=> a[1][1][1]=> a[1][1][2]=> a[1][1][3]=>
a[1][2][0]=> a[1][2][1]=> a[1][2][2]=> a[1][2][3]

转自:http://www.neu.edu.cn/cxsj/online/c6/ch6_3-3.html

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!