多维线性阵列C



我正在阅读这篇文章:如何快速遍历多维数组

我想更多地了解"线性多维数组",但我找不到任何相关的东西,想知道你们中是否有人见过类似的东西。

具体来说,我想更好地理解如何使用数学访问多维数组(声明为单维度)。听起来棒极了!

静态分配

在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维数组相同

相关内容

  • 没有找到相关文章

最新更新