五种结构体声明方式:
- 直接声明结构体类型
- 声明结构体类型的同时定义结构体变量
- 不指定结构体名而直接定义结构体变量
- 使用结构体标记和类型别名
- 直接声明结构体别名
在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
关键字来引用结构体类型。
无论采用哪种方式,定义的结构体类型本质上都是相同的,它们都有相同的结构体成员,并且可以通过别名来使用结构体类型。文章来源:https://www.toymoban.com/news/detail-410040.html
需要注意的是,如果结构体类型没有设置类型别名,则必须在定义变量时使用结构体标记来指定变量的类型,而不能使用类型别名。另外,如果结构体类型定义在函数内部,则只能在函数内部使用该结构体类型。文章来源地址https://www.toymoban.com/news/detail-410040.html
到了这里,关于结构体声明、定义和初始化的几种方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!