在C中分配2-Darrays

我想在运行时在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))

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

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

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

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

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

  int matrix[rows][cols];