use*_*827 3 c arrays malloc 2d
我想动态分配2D数组的1维(给出另一个维度).这有用吗:
int NCOLS = 20;
// nrows = user input...
double *arr[NCOLS];
arr = (double *)malloc(sizeof(double)*nrows);
Run Code Online (Sandbox Code Playgroud)
并释放它:
free(arr)
Run Code Online (Sandbox Code Playgroud)
不完全 - 你声明的是一个指针数组.你想要一个指向数组的指针,它将被声明为:
double (*arr)[NCOLS];
Run Code Online (Sandbox Code Playgroud)
然后,你就像这样分配它:
arr = malloc(nrows * sizeof(double[NCOLS]));
Run Code Online (Sandbox Code Playgroud)
然后可以nrows通过NCOLS2D阵列将其视为法线.要释放它,只需将其传递给free任何其他指针.
在C中,不需要转换返回值malloc,因为存在从void*任何指针类型的隐式转换(在C++中不是这样).实际上,这样做可以掩盖#include <stdlib.h>由于隐式声明的存在而导致的错误,例如失败,因此不鼓励这样做.
数据类型double[20]是"数组20 double,并且类型double (*)[20]是"指向数组20的指针double".该cdecl(1)程序非常有助于解密复杂的C声明(示例).