在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];