首页 > 解决方案 > 初始化数组中的结构

问题描述

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

#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;
}

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

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

标签: cstruct

解决方案


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

初始化只能通过定义进行。

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

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

推荐阅读