我不明白为什么当我尝试以这种方式初始化结构时出现错误
typedef struct _floor
{
int room;
int height;
int room_dim[room][2];
}Floor;
Run Code Online (Sandbox Code Playgroud)
为什么我不能用空间初始化room_dim数组?
A struct
必须具有编译时已知的大小.room
是一个结构变量,可以有任何值; 因此,它不是编译时常量,不能用于调整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;
}
Run Code Online (Sandbox Code Playgroud)
现在你可以ret->room_dim
像往常一样使用,额外的malloc
'd空间将用于room_dim
.