c - C:声明没有大小的多维数组?
问题描述
我正在尝试像这样声明一个长的二维数组,所以我可以稍后将长数组复制到正确大小的小数组中:
double arr_long[MAX][2]; double arr[][];
所以我以后可以使用:
arr = malloc(amount*sizeof(double[2]));
然后复制所有元素。(我正在用一个简单的 for 循环填充长数组)但是我的编译器给了我一个错误,说“数组类型的元素类型不完整”关于声明。有没有办法在不指定大小的情况下声明多维数组?
解决方案
您正在尝试更改 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);
}
推荐阅读
- ssas - 为什么要在似乎暗示的时候使用 CROSSJOIN?
- python - 修改 statsmodels 图
- postgresql - 为什么这些非常相似的 jsonpath 之一有效,而另一个无效?
- node.js - await 如何导致 for 循环退出
- php - 在 Mac 上通过 PHP 中的 scandir 访问外部 NAS /Volume
- python-3.x - Python - 管理 anaconda 和基本系统之间的软件包安装
- sql - 根据存储在不同表中的 ID 选择两个名称
- google-apps-script - Google 工作表:运行具有相似工作表名称的脚本
- postgresql - 如何从 CircleCI 连接到 DigitalOcean 上的 PostgreSQL 集群?
- flutter - Flutter 首次启动 - 最大深度误差