typedef语法说明

时间:2019-01-11 12:08:10

标签: c struct

以下声明之间我有些困惑-您能帮忙清理一下吗?

typedef struct {
  int a;
  int b;
} example;

还有这个

struct something {
  int a;
  int b;
} ob;

我不确定下面的意思是什么?

typedef struct foo {
  int a;
  int b;
} bar;

2 个答案:

答案 0 :(得分:5)

typedef struct {
  int a;
  int b;
} example;

这个定义了一个未命名的结构类型,并引入了example作为该结构类型的类型别名。因此,您只能将该结构类型称为“示例”。

struct something {
  int a;
  int b;
} ob;

该对象定义了一种结构类型something,还声明了该类型的对象ob。您只能将结构类型称为struct something

typedef struct foo {
  int a;
  int b;
} bar;

这个定义了一个名为foo的结构类型,并介绍了bar作为该结构类型的类型别名。您可以将该结构类型称为struct foobar

答案 1 :(得分:4)

使用

typedef struct {
  int a;
  int b;
} example;

您定义了一个未命名的结构,但是为该结构定义了类型别名example。这意味着您只能使用example“ type”创建结构的实例,例如

example my_example_structure;

使用

struct something {
  int a;
  int b;
} ob;

您定义一个名为something的结构,以及一个名为ob的结构的实例(变量)。您可以使用struct something创建结构的新变量:

struct something my_second_ob;

变量ob可以与结构的任何其他实例一样使用:

printf("b = %d\n", ob.b);

最后,与

typedef struct foo {
  int a;
  int b;
} bar;

您定义了一个名为foo的结构,因此您可以使用例如struct foo来定义变量。您还定义了也可以使用的类型别名bar。例如

struct foo my_first_foo;
bar my_second_foo;

typedef的常规语法是

typedef <actual type> <alias name>;

在您的示例的最后一种情况下,<actual type>

struct foo {
  int a;
  int b;
}

,而<alias namebar