【发布时间】:2012-10-27 11:58:28
【问题描述】:
我想在运行时在 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)) 类似。
【问题讨论】:
-
第二个版本完全不同,因为
rows需要是一个编译时常量表达式。只有第一个版本是真正的“动态”。 -
第一种情况
rows也是编译时常量,你不能同时声明行数和列数,对吧? -
@Cupidvogel in C 你不能动态声明它们中的任何一个
-
@icepack:在 C 中你有可变长度的数组。但是,不在 C++ 中。而且你没有变量 types.
-
@KerrekSB 对不起,你是对的。忘了C99