初始化结构数组

时间:2017-02-21 10:24:05

标签: c struct

我的代码看起来像这样

struct {
    int valid;
    int pid;
    int heading;
    int speed;
} car;

struct car road[10];    //a road filled with cars

然而,我的编译器抱怨:

“不完整的struct / union / enum car:road”

我做错了什么?我在网上看了一些例子,他们表明这是如何初始化结构数组。

如果不明显,我正在尝试制作汽车结构阵列

3 个答案:

答案 0 :(得分:3)

更改:

struct {
    int valid;
    int pid;
    int heading;
    int speed;
} car;

声明 只有 未命名结构的 ,名称为car,致:

struct car{
    int valid;
    int pid;
    int heading;
    int speed;
};

声明了新类型struct carstruct的名称必须位于关键字struct的旁边。

你也可以这样做:

typedef struct {
    int valid;
    int pid;
    int heading;
    int speed;
} car;

然后您只将此struct称为car,而不是struct car

有关structs及其语法的详细信息,请参阅this link

答案 1 :(得分:1)

此:

struct {
  ...
} car;

声明一个名为car的匿名结构的单个实例。除了使用新类型外,您可以将struct {... }部分视为与任何其他类型名称类似。由于您没有为结构指定名称,因此您不能创建超过car实例。

这似乎是一件毫无意义的事情,但是当你想要把事情分组在一起时它真的很有用。

你的意思是:

struct car {
 ...
};

声明一个名为struct car的新结构类型。您可以使用此名称来引用声明,例如稍后像你一样创建一堆实例:

struct car road[10];

答案 2 :(得分:1)

选项1(没有typedef):

FILE

选项2(带有未命名结构的typedef):

struct car {
    int valid;
    int pid;
    int heading;
    int speed;
};

struct car road[10];

选项3(带有命名结构的typedef):

typedef struct {
    int valid;
    int pid;
    int heading;
    int speed;
} car_t;

car_t road[10];

Linux Coding Style州:

  

错误对结构使用typedef ...