C语言结构体的声明和定义
在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。
一、结构体的声明和定义
在嵌入式系统中,对内存很敏感。所以在使用结构体时要注意“声明结构体类型”和“定义结构体变量”的区别。声明结构体类型只是指定了一个结构体的类型,它相当于一个模型,但其中并无具体数据,系统对之也不分配实际的内存单元。
声明一个结构体类型的一般形式为:
struct 结构体名
{成员列表};
要定义结构变量,则一般形式是:
struct 结构体名 结构体变量名;
在使用结构体时要注意结构体类型名和结构体变量名。构体类型名相当于“int a”里面的int,结构体变量名相当于a。
注意区分下面几个定义:
struct Student{ //声明结构体char name[20]; //姓名int num; //学号float score; //成绩
};
声明一个结构体类型Student,此时未分配内存单元。
struct Student stu1; //定义结构体变量
定义一个结构体变量stu1,此结构体变量的类型为Student,此时为变量stu1分配了内存单元。
truct Student{ char name[20]; int num; float score;
}stu1; //在定义之后跟变量名
在声明一个结构体类型Student的时候也定义一个结构体变量stu1,此时为变量stu1分配了内存单元。
struct { //没有结构名char name[20]; int num; float score;
}stu1;
使用匿名结构体来直接定义了一个结构体变量stu1,此时为变量stu1分配了内存单元。
在结构体的定义中经常使用typedef,typedef struct 是为了使用结构体更方便。
typedef struct
{int no;char name[12];
}Student;
此处定义了一个结构体类型,此时未分配内存单元。利用此结构体类型进行定义时不需要带struct,可直接定义。相当于先定义了一个匿名结构体,然后将该匿名结构体类型定义为别名Student。
利用该结构体类型定义结构体变量的方法如下:
Student stu1; //定义结构体变量
还有一种结构体定义方法如下:
typedef struct Student
{int no;char name[12];
}my_student;
此处定义了结构体类型,并不分配内存变量。相当于定义了结构体类型Student,然后Student类型又定义为Stu1。利用该结构体类型定义结构体变量的方法可以有两种分别如下:
struct Student stu1; //定义结构体变量
my_student stu2;//定义结构体变量
下面这种定义方法是错误的
typedef struct Student
{int no;char name[12];
};
二、结构体指针
当一个指针变量用来指向了一个结构变量,这个指针就成了结构指针变量。结构指针变量中的值是所指向的结构变量的首地址。可以通过指针来访问结构变量。
定义结构指针变量的一般形式:
struct 结构名 * 结构指针变量名
struct Student *pstu; //定义了一个指针变量,它只能指向Student结构体类型的结构体变量
结构指针变量的定义也可以与结构体的定义同时。而且它必须先赋值后使用。数组名表示的是数组的首地址,可以直接赋值给数组指针。但结构变量名只是表示整个结构体变量,不表示结构体变量的首地址,所以不能直接赋值给结构指针变量,而应该使用 & 运算符把结构变量的的地址赋值给结构指针变量。
通过结构指针间接访问成员值,访问的一般形式:
(*结构指针变量). 成员名 或 结构指针变量 -> 成员名
(*pstu).name
pstu->name
C语言结构体的声明和定义相关推荐
- 【C 语言】结构体 ( 结构体类型定义 | 结构体类型别名 | 声明结构体变量的三种方法 | 栈内存中声明结构体变量 | 定义隐式结构体时声明变量 | 定义普通结构体时声明变量 )
文章目录 一.结构体类型定义 二.结构体类型别名 三.结构体类型变量声明 1.使用结构体类型 ( 别名 ) 声明变量 2. 定义隐式结构体时声明变量 3.定义普通结构体时声明变量 二.完整代码示例 一 ...
- 【Struct(结构体)杂谈之二】名不正则言不顺---Struct(结构体)的声明、定义及初始化
Struct(结构体)的声明.定义及初始化 上一篇里我们讲了为什么我们要引入Struct这个数据类型,我们了解到Struct是一种聚合数据类型,是为了用户描述和解释一些事物的方便而提出的,Struct ...
- 结构体struct声明、定义
结构体是一种构造类型(结构体.数组.联合类型),结构体弥补了数组不能存储多种类型的缺陷(即结构体是由于相同类型或不同类的成员组成) 一般声明形式如: struct 结构体名称 { 成员列表 }; st ...
- 11【C语言 趣味算法】个人所得税问题(结构体应用):结构体的声明、定义结构体类型的三种方法等
Contents 一.Review 二.New Problem:Personal income tax issues(个人所得税问题) 2.1 Description of the problem 2 ...
- C语言结构体的作用、定义、使用方法以及实例
目前已学的数据类型:数组(1.所有数据的类型必须一致 2.访问数组的成员必须通过下标) 学籍管理系统:学生(姓名.学号.性别.年龄.成绩...) 飞机票订票系统:机票(订票时间.班号.起点.终点. ...
- C语言结构体的四种定义方式
1.先定义结构体类型,再定义结构体变量 struct student{int age;char* name; };struct student stu;//stu为student的结构体变量 2.定义 ...
- linux中c语言结构体详解,Linux C语言结构体-学习笔记
Linux C语言结构体简介 前面学习了c语言的基本语法特性,本节进行更深入的学习. 预处理程序. 编译指令: 预处理, 宏定义, 建立自己的数据类型:结构体,联合体,动态数据结构 c语言表达式工具 ...
- python展开 c函数中的宏预处理_Linux C语言结构体-学习笔记
Linux C语言结构体简介 前面学习了c语言的基本语法特性,本节进行更深入的学习. 预处理程序. 编译指令: 预处理, 宏定义, 建立自己的数据类型:结构体,联合体,动态数据结构 c语言表达式工具 ...
- 【C 语言】结构体 ( 结构体类型变量初始化 | 定义变量时进行初始化 | 定义隐式结构体时声明变量并初始化 | 定义普通结构体时声明变量并初始化 )
文章目录 一.结构体类型变量初始化 1.定义变量时进行初始化 2.定义普通结构体时声明变量并初始化 3.定义隐式结构体时声明变量并初始化 二.完整代码示例 一.结构体类型变量初始化 1.定义变量时进行 ...
最新文章
- c++关于map的find和count的使用
- SQL的基本数据类型
- 描述一下普适计算时代中的计算机,《课程总结报告-普适计算及其应用》.doc
- Python:执行精确的浮点数运算
- LightOJ - 1409 Rent a Car(最小费用最大流)
- 常用android的smali注入代码,android smali代码注入 实战一
- python可视化图表工具_酷炫的可视化图表工具来帮忙 深度评测五大Python数据可视化工具...
- Android获取手机联系人或通讯录的基本信息(如姓名、电话)
- Java随机生成长宽的矩形_java – 将正方形或矩形分解为大量随机大小的正方形或矩形...
- Netbackup 7.6新增功能和优势
- 子乐云音乐播放器源码V1.2php源码
- mysql 半同步 插件_编写半同步复制插件
- matlab通用程序,三次样条差值-matlab通用程序
- android studio选中全部,android - Android Studio风格维度已全部处理,未选中一项 - 堆栈内存溢出...
- 汇编常用DOS命令调用
- 腾讯敏感词汇大全_腾讯数平精准推荐 | OCR技术之识别篇
- 汽车厂VIN码生成软件
- c++除法保留小数_小学数学整数和小数的应用题解答方法公式汇总,新学期必备...
- Divisible [数学]同余定理
- Springboot导出excel,合并单元格示例
热门文章
- 咬文嚼字一下、信与讯的区别
- 计算机网络专业英语内容,计算机网络专业英语词汇资料.doc
- 【光驱不停自动弹出 有什么方法可以解决】
- Mac M1通过VMWare Fusion安装Centos7记录(镜像和网络有大坑)
- 计算机编程方程求解的步骤,求解数学物理方程的计算机方法.ppt
- 2022年最新整理必背的Java面试题大全,背好了Offer在手
- twrp调整分区_让TWRP支持解密高通data分区
- 腾讯云点播播放器TCPlayer开发文档整理edusoho
- VISSIM COM接口
- python飞机大战功能模块图_python pygame实现飞机大战游戏