在C中分配一个二维数组,其中一维固定

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)

Ada*_*eld 6

不完全 - 你声明的是一个指针数组.你想要一个指向数组的指针,它将被声明为:

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声明(示例).