我不明白为什么当我尝试以这种方式初始化结构时出现错误
typedef struct _floor
{
int room;
int height;
int room_dim[room][2];
}Floor;
为什么我不能使用 room 来初始化 room_dim 数组?
Astruct
必须具有在编译时已知的大小。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;
}
现在您可以ret->room_dim
照常使用了,多余malloc
的 'd 空间将用于room_dim
.
您可以改为使用 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);
您正在尝试动态初始化数组。这意味着您只会在运行时知道房间的大小。
[评论后编辑]
为了简单地理解它,不使用struct
,即使这样也不会在 C99 以下编译,但是在结构中仍然不允许这样做
int n;
int size[n];