2

我想在运行时在 C 中分配一个二维数组。现在这可以通过传统方式实现,如下所示:

int *matrix[rows]
for (row = 0; row < rows; ++row) {
  matrix[row] = (int *)malloc(ncol*sizeof(int));
}

但我找到了另一种方法,它做同样的事情:

int (*p)[rows];
p=(int (*)[rows])malloc(rows*cols*sizeof(int));

谁能解释第二个声明是如何工作的?具体来说,是什么意思(int (*)[rows])malloc?据我所知,malloc使用类似(int *)malloc(ncol*sizeof(int))or (char *)malloc(ncol*sizeof(char))

4

2 回答 2

2

在这里,您将malloc的返回值转换为指向数组rowsint类型指针。

顺便说一句,在 C 中,void指向对象指针的指针的强制转换不是必需的,甚至是无用的。您不必担心这些细节。以下代码也确实有效。

#include <stdlib.h>

int (*p)[rows];
p = malloc(rows * cols * sizeof(int));
于 2012-10-27T12:00:07.103 回答
0

这些是不等价的,第一个分配一个指向整数的指针数组,第二个分配一个整数数组并返回一个指向它的指针,您只需分配几个彼此相邻的因此允许“数组”的第二个维度。

如果您在函数结束后不需要数组,则更简单的版本是:

 int matrix[rows][cols];
于 2012-10-27T12:16:13.847 回答