在多维数组中,"行主序"(row-major order)和"列主序"(column-major order)是两种不同的数据存储和遍历方式。它们定义了多维数组在内存中元素的排列顺序。


行主序填充 (Row-major Order)

行主序是一种存储方式,其中数组的最后一维(通常是最内层的维度)变化最快。在C和C++中,多维数组默认采用行主序存储。

举例: 假设有一个二维数组A,其大小为3行4列。在行主序中,数组A在内存中的存储顺序如下:

A[0][0], A[0][1], A[0][2], A[0][3], // 第0行
A[1][0], A[1][1], A[1][2], A[1][3], // 第1行
A[2][0], A[2][1], A[2][2], A[2][3]  // 第2行

在这个例子中,我们首先填满第0行的所有列,然后是第1行,以此类推。

列主序填充 (Column-major Order)

列主序是另一种存储方式,其中数组的第一维变化最快。在Fortran和MATLAB中,多维数组默认采用列主序存储。

举例: 使用与行主序相同的二维数组A的例子,在列主序中,数组A在内存中的存储顺序如下:

A[0][0], A[1][0], A[2][0], // 第0列
A[0][1], A[1][1], A[2][1], // 第1列
A[0][2], A[1][2], A[2][2], // 第2列
A[0][3], A[1][3], A[2][3]  // 第3列

在这个例子中,我们首先填满第0列的所有行,然后是第1列,以此类推。


在处理多维数组,尤其是将它们转换为一维数组或在不同的系统之间传递数据时,了解数据的存储顺序是非常重要的。如果转换不当,可能会导致数据排列错误,从而影响程序的正确性。