在C中分配2-D阵列

时间:2012-10-27 11:58:29

标签: c pointers malloc

我想在运行时在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))(char *)malloc(ncol*sizeof(char))类似。

2 个答案:

答案 0 :(得分:2)

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

顺便说一句,在C中,指向void的指向对象指针的转换不是必需的,甚至是无用的。你不应该担心这些细节。以下代码也适用。

#include <stdlib.h>

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

答案 1 :(得分:1)

这些不等价,第一个分配一个指向整数的指针数组,第二个指定一个整数数组并返回一个指向它的指针,你只需要相互分配几个,因此允许第二个维度到'array'

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

 int matrix[rows][cols];