【问题标题】:Initialisation of an array of structs [closed]结构数组的初始化[关闭]
【发布时间】:2017-01-23 23:46:48
【问题描述】:

我正在尝试将结构数组初始化为零。出于某种原因,我收到错误“expected expression”。我的代码有什么问题?

struct mystruct {
    double a;
    double arr[2];
}

int main() {
    struct mystruct *array = (struct mystruct*)malloc(3 * sizeof(struct mystruct));
    for (int i = 0; i < 3; i++) {
        array[i] = { 0 };
    }
    return 0;
}

【问题讨论】:

  • 你忘了分号 :-S
  • 糟糕,已更正,但不,我没有忘记实际代码中的分号。
  • 考虑使用calloc 而不是malloc
  • array[i] = {0}; --> array[i] = (struct mystruct){0};

标签: c arrays struct initialization


【解决方案1】:

聚合初始化仅适用于... 初始化

struct mystruct x = {0};   // initialization

没有这样的赋值语法。

但您不需要,只需使用calloc 而不是malloc 来动态分配、归零的内存。

struct mystruct* array = calloc(3, sizeof(struct mystruct));

【讨论】:

    【解决方案2】:

    您的代码有语法错误。有不同的方法来纠正它:

    • 对复合文字使用 C99 语法:

      array[i] = (struct mystruct){ 0 };
      
    • 使用具有默认值的单独结构:

      struct mystruct def = { 0 };
      ...
      array[i] = def;
      
    • 显式初始化每个成员:

      array[i].a = 0;
      array[i].arr[0] = 0;
      array[i].arr[1] = 0;
      
    • 使用calloc()

      struct mystruct *array = calloc(3, sizeof(*array));
      

      calloc() 将内存块初始化为所有位为零。如果您的系统使用 IEEE 表示 double,则所有位零对应于值 0.0。如果没有,我给你一美元。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-29
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      • 2011-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多