若 struct 后面接的是名字, 则其为该结构体的名称.
第一种是最基本的结构体定义, 其定义了一个结构体 A.
- struct A // 第一种
- {
- int a;
- };
第二种则是在定义了一个结构体 B 的同时定义了一个结构体 B 的变量 m.
- struct B // 第二种
- {
- int b;
- }m;
第三种结构体定义没有给出该结构体的名称, 但是定义了一个该结构体的变量 n, 也就是说, 若是想要在别处定义该结构体的变量是不行的, 只有变量 n 这种在定义结构体的同时定义变量才行.
- struct // 第三种
- {
- int c;
- }n;
第四种结构体定义在第一种结构定义的基础上加了关键字 typedef, 此时我们将 struct D{int d} 看成是一个数据类型, 但是因为并没有给出别名, 直接用 D 定义变量是不行的. 如 D test;, 不能直接这样定义变量 test. 但 struct D test; 可行.
- typedef struct D // 第四种
- {
- int d;
- };
第五种结构体定义在第四种结构体定义的基础上加上了别名 x, 此时像在第四种结构体定义中说得那样, 此时的结构体 E 有别名 x, 故可以用 x 定义 E 的结构体变量. 用 E 不能直接定义, 需要在前面加 struct, 如 struct E test;.
- typedef struct E // 第五种
- {
- int e;
- }x;
第六种结构体定义在第五种的基础上减去了结构体名, 但是若是直接使用 y 来定义该结构体类型的变量也是可以的. 如 y test;.(常用)
- typedef struct // 第六种
- {
- int f;
- }y;
来源: http://www.bubuko.com/infodetail-3348189.html