C 字符*(*车辆)[5];动态分配
我试图在C中为以下内容动态分配空间,我想知道是否有人可以解释如何分配空间?字符*(*车辆)[5] 这5个元素是车辆的详细信息,第一个数组用于不同的车辆。所以我尝试为不同的车辆动态分配空间,每辆车都有5个点来显示字符串细节。执行下面的代码将只分配行,但由于定义中指定了5,我是否需要将分配中的车辆数乘以?此外,该数据类型来自api,因此很遗憾,我无法更改它,并且我不确定车辆的类型,我的印象是变量名 目前我正在做:C 字符*(*车辆)[5];动态分配,c,pointers,dynamic-memory-allocation,C,Pointers,Dynamic Memory Allocation,我试图在C中为以下内容动态分配空间,我想知道是否有人可以解释如何分配空间?字符*(*车辆)[5] 这5个元素是车辆的详细信息,第一个数组用于不同的车辆。所以我尝试为不同的车辆动态分配空间,每辆车都有5个点来显示字符串细节。执行下面的代码将只分配行,但由于定义中指定了5,我是否需要将分配中的车辆数乘以?此外,该数据类型来自api,因此很遗憾,我无法更改它,并且我不确定车辆的类型,我的印象是变量名 目前我正在做: char* (*vehicle)[][5]; vehicle = malloc(si
char* (*vehicle)[][5];
vehicle = malloc(sizeof(char*) * numVehicles);
这似乎在代码中起作用,但我觉得我没有正确地进行分配 由于这是指向
char*
指针的2D数组的指针,其中次要维度是5,主要维度是动态的,可能等于numVehicles
,因此它很可能是:
vehicle = malloc(sizeof(char*) * numVehicles * 5);
由于这是指向
char*
指针的2D数组的指针,其中次要维度是5,主要维度是动态的,可能等于numVehicles
,因此它很可能是:
vehicle = malloc(sizeof(char*) * numVehicles * 5);
由于这是指向
char*
指针的2D数组的指针,其中次要维度是5,主要维度是动态的,可能等于numVehicles
,因此它很可能是:
vehicle = malloc(sizeof(char*) * numVehicles * 5);
由于这是指向
char*
指针的2D数组的指针,其中次要维度是5,主要维度是动态的,可能等于numVehicles
,因此它很可能是:
vehicle = malloc(sizeof(char*) * numVehicles * 5);
您的分配显然不正确,因为它没有考虑指针指向的数组类型中的
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
的声明方式。它会起作用,但似乎不必要地过于复杂。如果您有选择,将车辆
声明为
char *(*vehicle)[5];
并将其分配为
vehicle = malloc(numVehicles * sizeof *vehicle);
在这种情况下,您将有太多的访问权限
vehicle[vehicle_index][0] = "Ford Focus";
vehicle[vehicle_index][1] = "ABS";
vehicle[vehicle_index][2] = "Sunroof";
...
与上一个示例相比,它没有那么复杂。您的分配显然不正确,因为它没有考虑指针指向的数组类型中的
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
的声明方式。它会起作用,但似乎不必要地过于复杂。如果您有选择,将车辆
声明为
char *(*vehicle)[5];
并将其分配为
vehicle = malloc(numVehicles * sizeof *vehicle);
在这种情况下,您将有太多的访问权限
vehicle[vehicle_index][0] = "Ford Focus";
vehicle[vehicle_index][1] = "ABS";
vehicle[vehicle_index][2] = "Sunroof";
...
与上一个示例相比,它没有那么复杂。您的分配显然不正确,因为它没有考虑指针指向的数组类型中的
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
的声明方式。它会起作用,但似乎不必要地过于复杂。如果您有选择,将车辆
声明为
char *(*vehicle)[5];
并将其分配为
vehicle = malloc(numVehicles * sizeof *vehicle);
在这种情况下,您将有太多的访问权限
vehicle[vehicle_index][0] = "Ford Focus";
vehicle[vehicle_index][1] = "ABS";
vehicle[vehicle_index][2] = "Sunroof";
...
与上一个示例相比,它没有那么复杂。您的分配显然不正确,因为它没有考虑指针指向的数组类型中的
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
的声明方式。它会起作用,但似乎不必要地过于复杂。如果您有选择,将车辆
声明为
char *(*vehicle)[5];
并将其分配为
vehicle = malloc(numVehicles * sizeof *vehicle);
在这种情况下,您将有太多的访问权限
vehicle[vehicle_index][0] = "Ford Focus";
vehicle[vehicle_index][1] = "ABS";
vehicle[vehicle_index][2] = "Sunroof";
...
这比