struct中的初始化数组

时间:2013-08-06 11:23:05

标签: c struct

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

typedef struct _floor
{
   int room;
   int height;
   int room_dim[room][2];
}Floor;

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

3 个答案:

答案 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];