📜  使用行优先和列优先顺序计算 1-D、2-D 和 3-D 元素的地址(1)

📅  最后修改于: 2023-12-03 15:22:26.548000             🧑  作者: Mango

使用行优先和列优先顺序计算 1-D、2-D 和 3-D 元素的地址

当我们使用数组时,我们需要知道如何计算元素的地址,以便可以访问它们。在计算数组元素的地址时,我们需要考虑两种不同的方式:行优先和列优先。

行优先

在行优先存储中,数组的元素按照行的顺序存储,因此它的存储方式被称为“按行存储”。对于一个二维数组,如下所示:

int arr[2][3] = { {1, 2, 3}, {4, 5, 6} };

在行优先存储中,我们计算元素的地址的公式是:

&arr[i][j] = (char*)arr + i * n * sizeof(int) + j * sizeof(int)

其中 n 是数组的第二个维度的长度。

对于一个三维数组,如下所示:

int arr[2][3][4] = { { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} }, { {13, 14, 15, 16}, {17, 18, 19, 20}, {21, 22, 23, 24} } };

在行优先存储中,我们计算元素的地址的公式是:

&arr[i][j][k] = (char*)arr + (i * n * k + j * n + k) * sizeof(int)

其中 n 是数组的第三个维度的长度。

列优先

在列优先存储中,数组的元素按照列的顺序存储,因此它的存储方式被称为“按列存储”。对于一个二维数组,如下所示:

int arr[2][3] = { {1, 2, 3}, {4, 5, 6} };

在列优先存储中,我们计算元素的地址的公式是:

&arr[i][j] = (char*)arr + j * m * sizeof(int) + i * sizeof(int)

其中 m 是数组的第一个维度的长度。

对于一个三维数组,如下所示:

int arr[2][3][4] = { { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} }, { {13, 14, 15, 16}, {17, 18, 19, 20}, {21, 22, 23, 24} } };

在列优先存储中,我们计算元素的地址的公式是:

&arr[i][j][k] = (char*)arr + (k * m * l + j * m + i) * sizeof(int)

其中 m 是数组的第一个维度的长度,l 是数组的第二个维度的长度。

总结

在计算数组元素的地址时,我们需要考虑使用哪种存储方式(行优先或列优先),以便计算元素的地址。对于不同维度的数组,我们需要使用不同的公式来计算元素的地址。