c - 初始化数组中的结构

标签 c struct

最近,我尝试了以下操作,作为初始化新结构并使其成为数组第一个元素的简写:

#include <stdio.h>

#define MAX_CARS 100

typedef struct car {
    int wheels;
    int cylinders;
    int maxSpeed;
    int canOffroad;
} Car;

int main(void) {
    Car all_cars[MAX_CARS];
    // This is nice, I would like to do something equivalent to this
    all_cars[0] = {.wheels = 4,
                   .cylinders = 8,
                   .maxSpeed = 120,
                   .canOffroad = 0};

    return 0;
}

但是,这会引发编译器错误,表示它需要在“{”之前有一个表达式。

现在,起初我以为我可能记错了初始化结构,但这是有效的:

#include <stdio.h>

#define MAX_CARS 100

typedef struct car {
    int wheels;
    int cylinders;
    int maxSpeed;
    int canOffroad;
} Car;

int main(void) {
    Car all_cars[MAX_CARS];
    // This is ok, but introduces a (potentially) unnecessary variable
    Car new_car = {.wheels = 4,
                   .cylinders = 8,
                   .maxSpeed = 120,
                   .canOffroad = 0};
    all_cars[0] = new_car;

    return 0;
}

所以问题显然在于将此结构初始化为数组元素而不是变量。

是否有允许像这样初始化结构的语法,或者每次我想向数组添加一个结构变量时我是否都坚持初始化一个新的结构变量?

最佳答案

问题是您试图初始化数组中的元素,这只有在您定义数组时才有可能。

只有在定义的情况下才可能进行初始化。

但是您可以使用 compound literals创建一个临时结构对象,然后将其复制到数组元素中:

all_cars[0] = (Car) {.wheels = 4,
                     .cylinders = 8,
                     .maxSpeed = 120,
                     .canOffroad = 0};

关于c - 初始化数组中的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57176126/

相关文章:

c - C 中没有 malloc 的链表

c - 我如何使用 For 循环初始化值开始取决于条件 for(k = (Char[i] == ' ' ? i - 1 : i ); j<k ; j++, k--)

c - 当写入者来去时从命名管道重新读取

python - 如何在 pyspark 中按字母顺序对嵌套结构的列进行排序?

改变数组的大小

c - 使用 OpenCL 的精度,hello world 示例中的 float 比较

java - C 和 Java 通过 Jni

c - 函数如何创建结构?

c++ - 模板和结构的混合

C fread() 一个结构体