我想在运行时在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))
类似。
答案 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];