二维数组的顺序存储是将多维数组的元素按照一维的顺序存储在计算机中,即一行一行的存储,存完一行,再在这一行尾元素后面接着存储下一行,对于二维数组A[m][n],可以视为由m个行向量组成的向量,或者是由n个列向量组成的向量,因为计算机的内存是一维的,所以多维数组的元素应排成线性序列后存入存储器,若数组A[12][18]采用列优先的存储方法进行顺序存储,每列元素个数为12个,且每个元素占3个存储单元,那么存储一列元素就需要12×3=36个存储单元。

(图片来源网络,侵删)
我们还需要知道如何计算二维数组元素的存储位置(地址),以列序为主序的存储方式的存储地址计算公式:LOC(i,j) = LOC(0,0) + (m*(j1)+(i1))*L,其中LOC(i,j)是元素a(i,j)的存储位置;LOC(0,0)是元素a(0,0)的存储位置(即二维数组的起始存储位置,称为基地址或基址);m是数组的总行数,L是单个数据元素占据的存储单元,同样,以行序为主序的存储方式的存储地址计算公式也可以类似地推导出来。
二维数组在顺序存储中,通常是按行优先(row-major)或列优先(column-major)的方式来存储在内存中的一维空间中,下面我将给出一个简单的二维数组例子,并以表格的形式展示它。
假设我们有一个3行4列的二维数组:
int array[3][4] = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} };
在按行优先的顺序存储中,这个数组的元素顺序是这样的:
下标(Row, Column) | 内存位置(假设每个元素占4字节) |
(0, 0) | 0x0000 |
(0, 1) | 0x0004 |
(0, 2) | 0x0008 |
(0, 3) | 0x000C |
(1, 0) | 0x0010 |
(1, 1) | 0x0014 |
(1, 2) | 0x0018 |
(1, 3) | 0x001C |
(2, 0) | 0x0020 |
(2, 1) | 0x0024 |
(2, 2) | 0x0028 |
(2, 3) | 0x002C |
以下是该二维数组的表格形式:
Row/Column | 0 | 1 | 2 | 3 |
0 | 1 | 2 | 3 | 4 |
1 | 5 | 6 | 7 | 8 |
2 | 9 | 10 | 11 | 12 |
在这个表格中,行和列的索引从0开始,正如C/C++等编程语言中的习惯,每个单元格中的数字对应于上面的内存位置中的元素值。

(图片来源网络,侵删)
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复