我正在阅读这篇文章:如何快速遍历多维数组
我想更多地了解"线性多维数组",但我找不到任何相关的东西,想知道你们中是否有人见过类似的东西。
具体来说,我想更好地理解如何使用数学访问多维数组(声明为单维度)。听起来棒极了!
静态分配
在c中,如果你想创建一个3x4的数组,你需要做下面的代码:
int array1[3][4]; // statically allocate 3x4 integer in stack. The memory will be organize like this:
// [[0, 1, 2, 3] // first row
// [4, 5, 6, 7] // second row
// [8, 9, 10, 11]
声明一个12int型数组
也是一样的int array2[12]; // memory will be
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
So: array1[2][3] == array[2* (number of columns) + 3] = 11
都是一样的,第一个比第二个更容易阅读。编译器知道数组的维数,所以它会为你计算地址。
<标题>动态地分配h1> 这种情况下,你不知道数组的维数,所以。创建一个3x4的数组,如下所示int **array1 = (int **) malloc(rows * sizeof(int *)); // allocate 4 pointers
for (int i = 0; i < rows; i++) {
array1[i] = (int *) malloc(columns * sizeof(int)); // allocate memory for each row.
}
// the memory will be organized like this
// array1 [row0pointer, row1pointer, row2pointer]
// some where else in the memory: ... row0 ... row1 ... row2 ..
它不是优化的,因为你需要内存来存储指针,当你访问每个成员时,你必须通过指针访问。因此,您可以分配一个具有rows * columns成员的单个数组:
int *array2 = (int *) malloc(rows * columns * sizeof(int));
// then when you want to access array2[i][j] you can easily access
array2[i * columns + j]
与n维数组相同
标题>