最近,我尝试了以下操作,作为初始化新结构并使其成为数组第一个元素的简写:
#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/