struct中的初始化数组

Maz*_*zzy 1 c struct

我不明白为什么当我尝试以这种方式初始化结构时出现错误

typedef struct _floor
{
   int room;
   int height;
   int room_dim[room][2];
}Floor;
Run Code Online (Sandbox Code Playgroud)

为什么我不能用空间初始化room_dim数组?

nne*_*neo 5

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.