结构声明

时间:2012-02-20 13:24:11

标签: c

我见过这样的结构声明

typedef struct br {
        int year;
        int km;

} Car;

我知道我可以使用像

这样的结构
Car ford;
ford.year = 1980;
ford.km = 12

但是声明中的“br”代表什么?

8 个答案:

答案 0 :(得分:12)

br称为结构标记。

创建的新类型为struct brCar只是struct br的类型别名。

此声明

struct br ford;

等同于此声明:

Car ford;   // ford is of type struct br

也是组合形式:

typedef struct br {
    int year;
    int km;
} Car;

等同于这些声明:

struct br {
    int year;
    int km;
};

typedef struct br Car;

答案 1 :(得分:5)

这是struct类型定义的组合声明。 Car是新定义类型的名称; br结构标记。您可以按如下方式使用它:

struct br x;

此合并声明等同于以下两个声明:

struct br {
    int year;
    int km;
};

typedef struct br Car;

答案 2 :(得分:2)

通过使用struct br{...};,您实际上定义了一种新类型struct br;。然后键入将此新类型解压缩为新类型Car。实际类型为struct br。因此,在这种情况下,br只是结构标记的占位符(因为您不使用它)。

答案 3 :(得分:0)

br是结构的结构标记(或“名称”)。请将typedef读作typedef名为struct的{​​{1}},其中我声明包含brint year,也称为int km 1}}“

答案 4 :(得分:0)

这里的问题是您定义的是struct br,然后您使用typedefstruct br与别名Car一起使用。

基本上是这样的:

struct br ford;

相同
Car ford;

查看typedef documentation

答案 5 :(得分:0)

查看typedef语法:

  

typedef“type”“name”;

struct br {...}是你通过typedef“命名”的。

部分程序员(比如我和Linus Torvalds)认为初学者手中的typedef是deus ex machina of code。

我遵循规则:“在隐藏某些内容时使用typedef ”,但很多人不同意。

  

struct linked_list_element * head;

比以下更清晰:

  

list * head;

答案 6 :(得分:0)

除了给出的其他答案:

如果使用typedef,struct标签是多余的功能。

结构标记与typedef一起使用只有一个用途,那就是结构需要引用自身时。例如,链表中的节点可以声明为:

typedef struct node
{
  struct node* next;
  int data;

} Node_t;

next指针现在将指向Node_t类型的结构。

答案 7 :(得分:0)

在您显示的问题中

typedef struct br {
        int year;
        int km;

} Car;

有br代表结构标签,Car显示类型定义。     您也可以按以下顺序重写代码。

struct br
{
        int year;
        int km;

} ;
typedef struct br Car;