当前位置: 首页 > news >正文

结构体的三种定义方法、结构体类型名(可选标志符)什么时候可以省略

结构体的三种定义方法

一、单独定义:

  先定义结构体类型,再定义变量
  定义结构体的格式如下:
   struct 结构体名 {
   若干数据项;
   } ;

  其中,struct为关键字; 结构体名是用户定义的类型标识。 { }中是组成该结构体的成员。成员的数据类型可以是C语言所允许的任何数据类型。
采用这种方式定义的结构体,创建变量的格式为:
   struct 结构体名(也就是可选标记符) 结构体变量名 ;
   例如

 struct student{int age;string name;};struct student s1,s2;

二、混合定义

   struct 结构体名 {
   若干数据项;
   } 结构体变量名 ;

  定义结构体类型时,同时定义结构变量
  其中,struct为关键字; 结构体名是用户定义的类型标识。 { }中是组成该结构体的成员。成员的数据类型可以是C语言所允许的任何数据类型,结构体变量名 为该结构体定义变量名称(用户自定义)。
  不难看出,相比于第1种形式,只是将“结构体变量”附加在大括号后面进行定义,省略了“struct 结构体名 结构体变量名 ;”这条语句,其余本质相同。
  例如

struct student{
int age;
string name;
}s1,s2;
其中,s1,s2是变量

三、无类型名定义

   struct {
   若干数据项;
   } 结构体变量名 ;

  相比于第2种形式,只是去掉了“结构体名”,其余本质相同。

struct {
int age;
string name;
}s1;

总结

   不难看出,形式1、形式2、形式3的主要区别体现在“有无结构体名”、“变量的定义位置”不同。
  第1种形式为“一般形式”,应熟悉掌握。
   形式2相比于形式1——只是 将“结构体变量”附加在大括号后面进行定义,省略了“struct 结构体名 结构体变量名 ;”这条语句,其余本质相同。
   形式3相比于形式2——只是 去掉了“结构体名” ,其余本质相同。
  因此,掌握了“形式1”,稍作变动即可得到形式2和形式3。

可选标志符(类型名)什么时候可以省

其一;

struct
{char title[MAXTITL]; char author[MAXAUTL];
float value;
}library;

//注意这里不再是定义声明结构体类型,而是直接创建结构体变量了,这个编译器会分配内存的;
//这样的确可以省略标识符也就是结构体名,但是只能使用一次;因为这是;声明结构体的过程和定义结构体变量的过程和在了一起;并且个成员变量没有初始化的;
//如果你想多次使用一个结构体模块,这样子是行不通的;
这种方式不能指明结构体类型名而是直接定义结构体变量,并且在值定义一次结构体变量时适用,无结构体名的结构体类型是无法重复使用的。
也就是说,后面程序不能再定义此类型变量了,除非再写一次重复的struct。

其二;

用typedef定义新类型名来代替已有类型名,即给已有类型重新命名;
一般格式为;typedef 已有类型 新类型名;

typedef int Elem; 
typedef struct{int date;..........
}STUDENT;
STUDENT stu1,stu2;

在这里插入图片描述
可参考文章:
https://zhuanlan.zhihu.com/p/520770506?utm_id=0

http://www.lryc.cn/news/6056.html

相关文章:

  • cgo静态编译不能用glibc,用musl
  • ​力扣解法汇总1124. 表现良好的最长时间段
  • 12- 降维算法 (PCA降维/LDA分类/NMF) (数据处理)
  • QT+ OpenGL学习
  • C语言(字符串输入)
  • 背包问题求方案数(AcWing)(JAVA)
  • 一篇文章带你读懂HashMap
  • Java如何进行优雅的判空——Optional类的灵活应用
  • Fluent Python 笔记 第 12 章 继承的优缺点
  • Go语言读取解析yml文件,快速转换yml到go struct
  • 第二十六章 java并发常见知识内容(ThreadLocal 详解)
  • 人类的第一语言是什么
  • jsp(全部知识点)
  • 测试开发面试基础题
  • C++——多态|虚函数|重写|虚表
  • IPV4地址详解
  • (一)初识Streamlit(附安装)
  • 【新】华为OD机试 - 斗地主 2(Python)| 刷完获取OD招聘渠道
  • 秒杀项目之消息推送
  • 【重磅】IEEE33配电网两阶段鲁棒优化调度CCG
  • GPT2代码拆解+生成实例
  • 基于android的即时通讯APP 聊天APP
  • 【C++】二叉树之力扣经典题目1——详解二叉树的递归遍历,二叉树的层次遍历
  • MySQL数据库调优————SQL性能分析
  • sql数据库高级编程总结(一)
  • 软件工程(5)--喷泉模型
  • SM2数字签名
  • RPA+保险后台部门擦出不一样“火花” | RPA案例
  • 设备树相关概念的理解
  • ubuntu20.04下配置深度学习环境GPU