首页 > 解决方案 > C:声明没有大小的多维数组?

问题描述

我正在尝试像这样声明一个长的二维数组,所以我可以稍后将长数组复制到正确大小的小数组中:

double arr_long[MAX][2]; double arr[][];

所以我以后可以使用:

arr = malloc(amount*sizeof(double[2]));

然后复制所有元素。(我正在用一个简单的 for 循环填充长数组)但是我的编译器给了我一个错误,说“数组类型的元素类型不完整”关于声明。有没有办法在不指定大小的情况下声明多维数组?

标签: cmultidimensional-arraymalloc

解决方案


您正在尝试更改 arr 的值( this 指向的地方)这是一个错误,因为这种类型的指针不能重新指向其他东西,除非它是一个参数。您可以将其视为 const 变量。你不能改变它的价值。您可以执行以下操作:

double * arr [2] ;

然后你调用 malloc .... 如果不想给它任何大小,那么你可以使用指向 double 的指针。如下:

double ** arr;

然后像这样调用 malloc

arr = (double **) malloc(sizeof(double *) * max);

所以在这里你有一个指针 arr 没有指向任何东西,如果你想让他们这样做,你应该为每个指针分配内存,如下所示:

for (int i = 0; i < max; i++){
   arr[i] = malloc(sizeof(double) * 2);
}

推荐阅读