欢迎来到天天文库
浏览记录
ID:41284179
大小:3.73 MB
页数:60页
时间:2019-08-21
《《结构体共用体》PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第12章结构体和共用体南京中医药大学信息技术学院本章学习内容结构体数据类型,共用体数据类型,枚举数据类型,定义数据类型的别名结构体变量、结构体数组、结构体指针的定义和初始化结构体成员的引用,成员选择运算符,指向运算符向函数传递结构体变量、结构体数组、结构体指针动态数据结构、动态链表二进制数——类型本不存在内存里存的内容,你认为它是什么,它就是什么在早期的机器指令及汇编语言中,数据对象均用二进制数表示,没有类型的概念一般的CPU只支持两种类型整数、浮点数12.1从基本数据类型到抽象数据类型在高级语言引入了基本数据类型整型、浮点型、字符型等不同语言会定义不同的基本类型基
2、本数据类型并不能方便地解决所有问题有些语言(如PL/1)中试图规定较多的类型,如数组、树、栈等,但实践证明不是个好办法12.1从基本数据类型到抽象数据类型用户自己构造数据类型-复合数据类型由基本数据类型迭代派生而来,表示复杂的数据对象典型的代表就是“结构体”抽象数据类型(AbstractDataType,简称ADT)在复合数据类型基础上增加了对数据的操作抽象数据类型进而进化为“类(Class)”这是一个跨时代的进步Class是Object-Oriented的一个重要概念12.1从基本数据类型到抽象数据类型12.2.1为什么要定义结构体类型在程序里表示一个人(姓名、年龄、性别…
3、),怎么表示?想表示多个人呢?如何用计算机程序实现下述表格的管理?数组的解决方法数组的解决方法数据的内存管理方式数组的解决方法分配内存不集中,寻址效率不高对数组赋初值时,易发生错位结构显得零散,不易管理希望的内存分配图结构体类型的声明声明了一个结构体类型构成结构体的变量称为结构体的成员(StructureMember)结构体的名字称为结构体标签(StructureTag)结构体类型的声明结构体模板(StructureTemplate)Don’tforgetthesemicolon!!形成一个类型声明的样板用于生成结构体变量但并未声明结构体变量因而编译器不为其分配内存(1)先定
4、义结构体类型,再定义变量名(2)在定义类型的同时定义变量(3)直接定义结构体变量(不指定结构体标签)12.2.2结构体变量的定义12.2.3用typedef定义数据类型structstudentstu1,stu2;/*Itworks*/STUDENTstu1,stu2;/*Itworks!*/关键字typedef为一种已存在的类型定义一个别名,并未定义新类型STUDENT与structstudent类型是同义词等价于12.2.4结构体变量的初始化等价于注意!嵌套的结构体(NestedStructure)就是在一个结构体内包含了另一个结构体作为其成员12.2.5嵌套的结构体结构
5、体定义可以嵌套访问结构体变量的成员必须使用成员选择运算符(也称圆点运算符)12.2.6结构体变量的引用当出现结构体嵌套时,必须以级联方式访问结构体成员【例12.1】演示结构体变量的赋值和引用方法12.2.6结构体变量的引用按结构体的成员顺序逐一对相应成员进行赋值格式符%02d中2d前面的前导符0表示输出数据时,若左边有多余位,则补0【例12.1】若要从键盘输入结构体变量stu1的内容,那么程序如何修改?两个地址有何不同?【例12.1】若要从键盘输入结构体变量stu1的内容,那么程序如何修改?结构体成员的地址与该成员在结构体中所处的位置及其所占内存的字节数相关结构体变量的地址&
6、stu2是该变量所占内存空间的首地址12.2.7结构体所占内存的字节数struct类型用内存字节数=?是所有成员变量的内存总和吗?printf("%d",sizeof(structsample));用运算符sizeof获得结构体大小sizeof(变量或表达式)sizeof(类型)12Why?printf("%d",sizeof(SAMPLE));【例12.2】12.2.7结构体所占内存的字节数事实上,所有数据类型在内存中都是从偶数地址开始存放的且结构所占的实际空间一般是按照机器字长对齐的不同的编译器、平台,对齐方式会有变化结构体变量的成员的存储对齐规则是与机器相关的具
7、有特定数据类型的数据项大小也是与机器相关的所以一个结构体在内存中的存储格式也是与机器相关的非所有成员变量的内存总和12个字节chfchchchf12.3结构体数组的定义和初始化12.3结构体数组的定义和初始化建立了数据库中的多条记录,每条对应一个学生信息【例12.3】利用结构体数组计算每个学生的平均分12.4结构体指针的定义和初始化ptstu1STUDENTstu1;STUDENT*pt;pt=&stu1;成员1成员2成员3成员4成员5如何定义指向结构体变量的指针?STUDENT*pt=&stu1;等价
此文档下载收益归作者所有