【问题标题】:C, use int variable as array size inside structure [duplicate]C,使用int变量作为结构内的数组大小[重复]
【发布时间】:2020-09-03 09:00:18
【问题描述】:

我想通过使用此结构的参数来定义结构内的数组大小。 C 允许这样做吗?

struct queue {
    int head;
    int top;
    int size;
    struct action action[size];
};

【问题讨论】:

  • @PhilippClaßen 它已关闭,因为重复的答案准确地说明了灵活的数组成员。

标签: c struct


【解决方案1】:

不,你不能。由于action 不是动态变量,编译器需要在编译时知道action 需要多少空间。 size 甚至没有被初始化。无论如何,您只需尝试编译即可看到这一点。

【讨论】:

  • 您似乎错过了“类似这样的东西”部分,灵活的数组成员肯定可以实现类似的效果,请参阅参考问题。
  • 在提到的问题中,答案中的代码包含指针。这里没有指针。但是如果你认为你可以做到这一点,为什么不尝试编译它呢?如果我尝试编译代码,我会得到这个main.c:5:26: error: ‘size’ undeclared here (not in a function) struct action action[size];,就像我在答案中所期待的那样
  • 请解释您对“something like this”子句的理解。
  • 类似这样的事情,引用,“通过使用此结构的参数定义结构内的数组大小”,这正是 FLA 用于。
  • Bereal 是对的,这是我的问题。抱歉,如果不清楚。我得到了答案,谢谢大家。
【解决方案2】:

size 在定义结构时是未知的。因此编译器不可能理解结果会有多大。通常,您将首先为结构分配内存,并拥有一个struct action *action; 成员。初始化结构体后,使用instance->action = calloc(instance->size, sizeof *instance->action) 为数组分配内存。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-03
    • 2020-09-10
    • 1970-01-01
    • 2015-08-26
    • 2012-11-14
    • 1970-01-01
    • 2019-12-28
    • 1970-01-01
    相关资源
    最近更新 更多