五种结构体声明方式:
- 直接声明结构体类型
- 声明结构体类型的同时定义结构体变量
- 不指定结构体名而直接定义结构体变量
- 使用结构体标记和类型别名
- 直接声明结构体别名
在C语言中,标记(tag)是在定义
struct
, union或enum关键字之后使用的标识符。
之所以称其为结构体的“tag”而不是“name”,是因为在C语言中,仅使用 tnode 不会指向该结构体(标记为tnode的struct),而需要用 struct tnode。
结构体的声明及定义:
// 直接定义结构体类型
struct student{
char no[20]; //学号
char name[20]; //姓名
char sex[5]; //性别
int age; //年龄
};
struct student stu3;
// 定义结构体类型的同时定义结构体变量
struct student{
char no[20]; //学号
char name[20]; //姓名
char sex[5]; //性别
int age; //年龄
} stu1,stu2;
struct student stu3;
// 不指定结构体名而直接定义结构体变量
struct{
char no[20]; //学号
char name[20]; //姓名
char sex[5]; //性别
int age; //年龄
} stu1,stu2;
// 直接定义结构体变量stu1、stu2之后,就不能再继续定义该类型的变量
// 使用结构体标记和类型别名
typedef struct student{
char no[20]; //学号
char name[20]; //姓名
char sex[5]; //性别
int age; //年龄
}student_t;
student_t stu1,stu2; //此时stu1,stu2为student结构体变量
struct student stu3;
// 直接定义结构体别名
typedef struct{
char no[20]; //学号
char name[20]; //姓名
char sex[5]; //性别
int age; //年龄
}student_t;
student_t stu1,stu2; // 只能使用这种方式
有typedef 和无typedef 关键字的区别在于,第一种方式将结构体标记和类型别名定义在一起,可以更方便地使用别名来代替结构体类型;
而第二种方式直接定义结构体类型,不需要定义结构体标记,但需要使用
struct
关键字来引用结构体类型。
无论采用哪种方式,定义的结构体类型本质上都是相同的,它们都有相同的结构体成员,并且可以通过别名来使用结构体类型。
需要注意的是,
如果结构体类型没有设置类型别名,则必须在定义变量时使用结构体标记来指定变量的类型,而不能使用类型别名。
另外,如果结构体类型定义在函数内部,则只能在函数内部使用该结构体类型。
版权声明:本文为zpf1813763637原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。