【发布时间】:2019-03-23 16:22:34
【问题描述】:
我的代码有问题:
typedef struct{
int a;
int b;
} Passenger;
typedef struct{
int amount;
Passenger bus_array[amount];
} Bus;
此处未申报的金额。
【问题讨论】:
-
不,不会。事实上,您不能声明这样的结构,因为当您创建它的实例时,编译器不知道要为它保留多少空间。您必须使用指针并动态分配数组。您很可能会在设置
ammount[sic] 并取消分配旧内存然后分配新内存的函数中更改amount。这将朝着 C++ 的方向发展(类是对它们进行操作的数据结构)。 -
也许您正在寻找的是flexible array member?
-
谢谢你,Peter,你能帮我分配内存吗?我知道如何将 malloc 用于 int 或 double 数据类型,但不知道用于 struct 数据类型:(
-
当您使用
malloc为int的数组分配内存时,您使用sizeof(int)作为元素大小对吗?与结构完全相同,但类型是例如struct Passanger,表示你使用sizeof(struct Passanger)。 -
@Someprogrammerdude 我不知道灵活的数组成员(只知道 C99 之前的 hack 与静默扩展端数组)。这样的结构总是需要动态分配它们的空间,这意味着它们不能在数组中,对,因为它们的
sizeof()是错误的(嘿,它是sizeoff()!)? (除了大小为零的数组。)