我正在尝试为C中的以下内容动态分配空间,我想知道是否有人可以解释如何? char *(* vehicle)[] [5];
5个元素是车辆的细节,第一个阵列是针对不同的车辆。所以我试图动态地为不同的车辆分配空间,numVehicles和每个有5个点的字符串细节。执行下面的代码只会分配行,但由于定义了5个指定,我需要多次分配我的车辆数量吗?另外,这个数据类型来自api,所以我遗憾的是无法改变它而且我不确定类型的车辆,我的印象是变量名称。
目前我在做:
char* (*vehicle)[][5];
vehicle = malloc(sizeof(char*) * numVehicles);
这似乎在代码中起作用,但我觉得我没有正确地进行分配。
答案 0 :(得分:2)
由于这是指向char *
指针的2D数组的指针,其中次要维度为5,主要维度是动态的,大概等于numVehicles
,因此它很可能是:
vehicle = malloc(sizeof(char*) * numVehicles * 5);
答案 1 :(得分:1)
您的分配显然不正确,因为它没有考虑您指针所指向的数组类型中的5
。如果您的代码通过自己的错误“补偿”分配错误,那么它似乎可以在代码中工作。不使用5
提供的任何额外内存。我们没有看到你的其他代码,这就是为什么没有办法说出它为何起作用的原因。
无论如何,你可以通过
分配它vehicle = malloc(numVehicles * sizeof **vehicle);
(sizeof **vehicle
会给你sizeof(char *[5])
)。
现在您可以访问数组元素
(*vehicle)[vehicle_index][0] = "Ford Focus";
(*vehicle)[vehicle_index][1] = "ABS";
(*vehicle)[vehicle_index][2] = "Sunroof";
...
但是,您希望将vehicle
作为指向未指定大小数组的指针,这就是您vehicle
的声明方式,这很奇怪。它会起作用,但似乎不必要地过于复杂。如果您有选择,将vehicle
声明为
char *(*vehicle)[5];
并将其分配为
vehicle = malloc(numVehicles * sizeof *vehicle);
在这种情况下,您也可以将其作为
访问vehicle[vehicle_index][0] = "Ford Focus";
vehicle[vehicle_index][1] = "ABS";
vehicle[vehicle_index][2] = "Sunroof";
...
比前一个例子更复杂。