【发布时间】:2020-09-03 09:00:18
【问题描述】:
我想通过使用此结构的参数来定义结构内的数组大小。 C 允许这样做吗?
struct queue {
int head;
int top;
int size;
struct action action[size];
};
【问题讨论】:
-
@PhilippClaßen 它已关闭,因为重复的答案准确地说明了灵活的数组成员。
我想通过使用此结构的参数来定义结构内的数组大小。 C 允许这样做吗?
struct queue {
int head;
int top;
int size;
struct action action[size];
};
【问题讨论】:
不,你不能。由于action 不是动态变量,编译器需要在编译时知道action 需要多少空间。 size 甚至没有被初始化。无论如何,您只需尝试编译即可看到这一点。
【讨论】:
main.c:5:26: error: ‘size’ undeclared here (not in a function) struct action action[size];,就像我在答案中所期待的那样
size 在定义结构时是未知的。因此编译器不可能理解结果会有多大。通常,您将首先为结构分配内存,并拥有一个struct action *action; 成员。初始化结构体后,使用instance->action = calloc(instance->size, sizeof *instance->action) 为数组分配内存。
【讨论】: