我不明白为什么当我尝试以这种方式初始化结构时出现错误
typedef struct _floor
{
int room;
int height;
int room_dim[room][2];
}Floor;
为什么我不能用空间初始化room_dim数组?
答案 0 :(得分:5)
struct
必须具有编译时已知的大小。 room
是一个struct变量,可以有任何值;因此,它不是编译时常量,并且不能用于调整struct
成员的大小。
相反,您可以将最终元素设置为灵活的数组成员并在运行时分配它:
struct floor {
int rooms;
int height;
int room_dim[][2];
};
struct floor *make_empty_floor(int rooms) {
struct floor *ret = malloc(sizeof(struct floor) + sizeof(ret->room_dim)*rooms);
ret->rooms = rooms;
return ret;
}
现在您可以像往常一样使用ret->room_dim
,而额外的malloc
'd空间将用于room_dim
。
答案 1 :(得分:2)
你可以使用malloc获取动态内存,而不是使用room_dim [room] [2] 。由于以上不是c编译器中允许的标准。
例如
typedef struct floor
{
int *room_dim[];
int height;
int room;
}floor;
scanf("%d",&room);
floor.room_dim=(floor *) malloc(sizeof(floor)*room);
答案 2 :(得分:1)
您正在尝试动态初始化数组。这意味着您只能在运行时知道房间的大小。
[评论后编辑]
要简单地理解它,不使用struct
,即使这不会在C99下编译,但是在结构中这仍然是不允许的
int n;
int size[n];