程序设计基础C语言第12章 结构体与共用体
发布时间:2024-10-23
发布时间:2024-10-23
C语言教程
第12章 结构体 与共用体
C语言教程
内容提要 结构体数据类型,共用体数据类型,枚举数据类型,定义数据类型的别名
结构体变量、结构体数组、结构体指针的定义和初始化
结构体成员的引用,成员选择运算符,指向运算符
向函数传递结构体变量、结构体数组、结构体指针
C语言教程
12.1从基本数据类型到抽象数据类型
二进制数——数据类型本不存在
在早期的机器指令及汇编语言中,数据对象 均用二进制数表示,没有类型的概念 内存里存的内容,你认为它是什么,它就是 什么
一般的CPU只支持两种类型
整数、浮点数
C语言教程
12.1从基本数据类型到抽象数据类型
在高级语言引入了基本数据类型
整型、浮点型、字符型等不同语言会定义不同的基本类型
基本数据类型并不能方便地解决所有问题 有些语言(如PL/1)中试图规定较多的类型,
如数组、树、栈等,但实践证明不是个好办 法
C语言教程
12.1从基本数据类型到抽象数据类型
用户自己构造数据类型-复合数据类型 – 由基本数据类型迭代派生而来,表示复杂的数据对象
典型的代表就是“结构体”
抽象数据类型(Abstract Data Type,简称ADT) – 在复合数据类型基础上增加了对数据的操作
抽象数据类型进而进化为“类(Class)” – 这是一个跨时代的进步 – Class是Object-Oriented的一个重要概念
C语言教程
12.2.1为什么定义结构体类型?
在程序里表示一个人(姓名、年龄、性别…), 怎么表示? 想表示多个人呢? 如何用计算机程序实现下述表格的管理?
C语言教程
数组的解决方法
C语言教程
数组的解决方法
C语言教程
数组的解决方法
数据的内存管理方式分配内存不集中, 寻址效率不高 对数组赋初值时, 易发生错位 结构显得零散,不 易管理
C语言教程
希望的内存分配图
C语言教程
结构体类型的声明声明了一个结构体类型 结构体的名字 称为结构体标 签(Structure Tag)
构成结构体的变量 称为结构体的成员(Structure Member)
C语言教程
结构体类型的声明Don’t forget the semicolon!!
结构体模板(Structure Template)
C语言教程
12.2.2结构体变量的定义(1)先定义结构体类型再定义变量名 (2)在定义类型的同时定义变量 (3)直接定义结构体变量(不指定结构体标签)
C语言教程
12.2.3用typedef定义数据类型名关键字typedef为一种 已存在的类型定义一个 别名,并未定义新类型 STUDENT与struct student类型是同义词
struct student struct STUDENT
student stu1, stu2;/*It works*/ stu1, stu2; /*Can this work?*/ stu1, stu2; /*Can this work?*/ stu1, stu2; /*It works!*/
C语言教程
12.2.4结构体变量的初始化
等价于
C语言教程
12.2.5嵌套的结构体
嵌套的结构体(Nested Structure)就是在 一个结构体内包含了另一个
结构体作为其成 员