我见过这样的结构声明
typedef struct br {
int year;
int km;
} Car;
我知道我可以使用像
这样的结构Car ford;
ford.year = 1980;
ford.km = 12
但是声明中的“br”代表什么?
答案 0 :(得分:12)
br
称为结构标记。
创建的新类型为struct br
,Car
只是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}},其中我声明包含br
和int year
,也称为int km
1}}“
答案 4 :(得分:0)
这里的问题是您定义的是struct br
,然后您使用typedef
将struct 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;