结构体声明、定义和初始化的几种方式

五种结构体声明方式:

  • 直接声明结构体类型
  • 声明结构体类型的同时定义结构体变量
  • 不指定结构体名而直接定义结构体变量
  • 使用结构体标记和类型别名
  • 直接声明结构体别名

在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 关键字来引用结构体类型。

无论采用哪种方式,定义的结构体类型本质上都是相同的,它们都有相同的结构体成员,并且可以通过别名来使用结构体类型。

需要注意的是,如果结构体类型没有设置类型别名,则必须在定义变量时使用结构体标记来指定变量的类型,而不能使用类型别名。另外,如果结构体类型定义在函数内部,则只能在函数内部使用该结构体类型。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值