c-2d数组声明,并对答案(参数)进行解释



我知道已经发布了一些关于使用malloc的2d数组的问题,但是,我想参考其中一个问题的答案。

我无法想象以下片段的实现:

分配一个由M行N列组成的数组,如下所示:

int (*array)[N] = malloc(M * sizeof *array);
  1. 如果我们有M行,为什么*array有N个参数
  2. *array(也称为数字(的大小是多少?我只将malloc((部分的结果理解为M*N,而是结构的单个块(1d(
  3. 仅在malloc中传递的M大小是如何变成行数的?它是如何变成*array[M][N]

我很感激你的回答。

如果我们有M行,为什么*数组有N个参数
仅在malloc中传递的M大小如何变成行数?

问题中的代码是编写表达式的最正确方法的简化版本:

int (*array)[M][N] = malloc(sizeof *array);

然而,这种形式使用起来有问题,因为现在我们必须以(*array)[i][j]的形式访问数组,这既奇怪又麻烦。

因此,有一个技巧可以省去最左边的维度,而是使用指向第一个元素的指针。int [M][N]的第一个元素是int [N],并且指向这种元素的指针是int(*)[N]

使用int (*array)[N],我们可以访问作为array[i][j]的数组,其中[i]int(*)[N]类型上的指针算术,而[j]int*(衰减的int [N]数组(上的指针算法。

*阵列的大小是多少

它是sizeof(int [N])字节,或者如果要sizeof(int)*N字节。

更多细节可以在这里找到:正确分配多维数组

最新更新