C语言课件:第8章 结构及其地数据类型

举报
资源描述
1第第8 8章章 结构及其地数据类型结构及其地数据类型1.1.了解了解 TYPEDEF TYPEDEF 的作用。的作用。2.2.理解结构体的含义。理解结构体的含义。3.3.掌握结构体类型变量的定义方法。掌握结构体类型变量的定义方法。4.4.掌握结构体类型变量的引用方法。掌握结构体类型变量的引用方法。5.5.掌握结构体类型变量如何在定义的同时初始化。掌握结构体类型变量如何在定义的同时初始化。6.6.理解共同体的含义理解共同体的含义,掌握共同体变量的定义方法。掌握共同体变量的定义方法。7.7.了解结构体数组的定义和数组元素的引用。了解结构体数组的定义和数组元素的引用。8.8.了解指向结构体类型数据的指针的概念及使用。了解指向结构体类型数据的指针的概念及使用。9.9.了解链表结点的结构形式了解链表结点的结构形式,链表的基本操作。链表的基本操作。10.10.了解枚举类型的定义了解枚举类型的定义,及枚举类型的输入输出。及枚举类型的输入输出。11.11.掌握各种位运算符掌握各种位运算符,运算规则和优先级。运算规则和优先级。12.12.了解位运算的实际应用。了解位运算的实际应用。13.13.了解位段的定义和应用。了解位段的定义和应用。教教教学学学要要要求求求2教教教教教教学学学学学学内内内内内内容容容容容容8.2 8.2 8.2 8.2 结构结构结构结构1.结构类型说明、结构变量定义3.结构与函数 4.结构指针与链表 2.结构变量的初始化和使用8.1 8.1 8.1 8.1 类型定义类型定义类型定义类型定义8.4 8.4 8.4 8.4 枚举枚举枚举枚举8.6 8.6 8.6 8.6 小结小结小结小结8.3 8.3 8.3 8.3 联合联合联合联合1.联合类型说明、联合变量定义2.联合变量的初始化和使用8.5 8.5 8.5 8.5 位运算和位段位运算和位段位运算和位段位运算和位段1.位运算2.位段引引引引言言言言结结结结束束束束3第八章第八章 引言引言目前我们已经掌握了利用数组来组织一组类型相同,关系密切的数据,利用指针实现了对已知类型的对象的间接控制操作。但还有很多实际问题的数据表示没有解决。比如,一个管理学生信息的程序,关于学生的数据可能有姓名、性别、出生日期、住址、系别、专业、成绩等信息,它们不是一个个相互独立的数据,逻辑上,应该把它们看作一个整体,因为它们共同描述了一个学生的情况。我们注意到这些信息的类型不同,无法用数组表示,需要另外的数据描述机制,结结构构与联联合合是 C 语言提供的不同于数组的重要的构造类型,它们是编写复杂程序时常用的数据类型。48.1 8.1 类型定义类型定义u用户定义类型编程时自己定义的数据类型称作 用户定义类型。C语言提供类型自定义的机制,其作用是简化对数据的描述。u C 语言的类型定义形式 typedef 类型名 标识符u typedef 的作用仅仅是用新类型名来代表已存在的类型名,并未产生新的数据类型。原有的类型名依然有效。新的类型名可以和 C 语言中原有的各种基本类名一样,方便地用于定义变量、定义函数的返回值和定义其他构造类型的元素或成员。必须是在此语句之前已定义的类型标识符;新类型的名字5u【例8.1】typedef int INTEGER;给 int 类型定义一个新的名字 INTEGER,在此之后,可以用 INTEGER 来定义整型变量。如:INTEGER i,j,a10;u【例8.2】typedef char *CHARP新类型名 CHARP 是字符指针类型,表示的旧类型是 char*,所以 CHARP p;等价于:char*p;u【例8.3】typedef double VECT4定义一种具有 4 个元素的双精度数组类型 VECT。程序中 VECT v1,v2;定义两个 4 个元素的双精度数组。8 8.1 1 类类型型定定义义6u【例8.4】typedef int MAT34;定义34的矩阵 MAT。程序中 MAT m1,m2;定义两个34的整数矩阵。int fun(MAT m);说明了一个参数类型为 MAT 的整型函数 fun。u【例8.5】typedef char (*funp)(int);新定义新类型 funp,funp 是函数指针,函数有一个整型参数,返回一个字符。程序中 funp a;定义一个函数指针 a,整型参数,返回字符。u 说明 typedef 没有创造新数据类型 typedef 是定义类型,不能定义变量 typedef 与 define 不同8 8.1 1 类类型型定定义义 definetypedef预编译时处理编译时处理简单字符置换 为已有类型命名7utypedef 定义类型步骤按定义变量方法先写出定义体 如:int i;将变量名换成新类型名 如:int INTEGER;最前面加 typedef 如:typedef int INTEGER;用新类型名定义变量 如:INTEGER i,j;8 8.1 1 类类型型定定义义例:定义数组类型int a100;int ARRAY100;typedef int ARRAY100;ARRAY a,b,c;int a100,b100,c100;例:定义函数指针类型(略)int (*p)();int (*POWER)();typedef int(*POWER)();POWER p1,p2;int (*p1)(),(*p2)();例:定义指针类型char*str;typedef char *STRING;char*STRING STRING p,s10;char *p,*s10;88.2 8.2 结构结构结构可以将若干个不同类型的数据组合成一个复合数据对象。组成结构的数据项称结构的成分或成员。结构及其成员均给其一个名字,以实现对结构成员的访问。有些资料中将结构称为结构体。本书使用结构,既指类型,也指实体变量,视上下文的语义决定结构的含义。对于某个具体的结构类型,成员的数量必须固定,但该结构中各个成员的类型可以不同。如表示学生信息的结构,可以包括姓名、性别、生日和成绩四个成员,但这些成员的类型可以不同,姓名、性别是字符串,生日是数字,成绩是包含 4 个浮点数的数组。91.结构类型说明、结构变量定义u 结构类型说明l结构类型说明一般形式 struct 结构名 成员说明序列;l实例日期可用包含三个成员的结构来描述:struct date int year,month,day;学生信息的结构类型说明如下:struct student char name15;char sex;struct date birthday;float score4 8 8.2 2 结结构构 成成员员名名可可以以和和程程序序中中的的其其他他变变量量同同名名,不不同同结结构构中中的的成成员也可以同名。员也可以同名。结结构构名名是是结结构构类类型型说说明明的的标标志志,可省略可省略 可可以以用用struct 结结构构名名 的的形形式式代表整个说明代表整个说明,相当于一个类型名。相当于一个类型名。也也可可同同时时说说明明几几个个成员成员 成成员员说说明明序序列列包包括括结结构构各各个个成成员员的的类类型型及及名名字字,与与变变量量定定义义一一样样,可可用用一一个个类类型型名名说明一个成员。说明一个成员。成成员员可可以以是是已已说说明过的结构类型名。明过的结构类型名。类型说明描述结构的组织形式类型说明描述结构的组织形式,不分配内存不分配内存!10l注意结构类型定义可以嵌套(即结构成员可以是结构类型),ANSI允许嵌套至少为15 层;结构类型定义不允许递归(即结构成员是被描述的结构本身);结构类型与结构体变量概念不同。类型:不分配内存;变量:分配 类型:不能赋值,存取,运算;变量:可以可以把“struct 结构名”理解为一个结构类型名,和 C语言中其他类型名的使用方法一样。如:struct date 是一个结构类型名;struct student 也是一个结构类型名。8 8.2 2 结结构构11u结构变量定义l方法一 直接定义结构类型变量,将一个结构说明当成类型描述,在它后面列出变量标识符。这种方法没有结构名,定义形式如下:struct 成员说明序列 结构变量表;例:struct char name10;int age;int class;stu1,stu25,*stu3;l方法二 声明类型的同时,定义结构变量:struct 结构名结构名 成员说明序列 变量表;8 8.2 2 结结构构结构名结构名 说明结构类型同时定义一个结构变量,一个具有 5 个元素的结构数组,一个基类型为该结构类型的指针变量。student12l方法三 使用已声明的结构类型定义变量:struct 结构类型名 结构变量表;例:用上例中说明的 struct student 定义结构变量 struct student p1,*p2;l方法四 定义结构类型,再定义结构变量:typedef struct 成员说明序列 结构类型名;结构类型名 结构变量表;例:在关于图形的程序中,经常使用描述三维空间点的结构类型 struct point,可以考虑将其定义成一个新类型,使用新的类型名定义结构变量:8 8.2 2 结结构构 POINT是一个结构类型名,能唯一标识结构类型,可用它来定义变量,如同int、char一样,不必再写struct。typedef struct double x,y,z;POINT;POINT p1,p25,*p3;13u结构的实现存储结构对象,需要存储它的各个成员,C语言为结构对象分配足够大的存储空间,顺序地放入各个成员,但具体的存储位置,由一组对齐规则来调整,结构里的成员未必一个紧接着一个存放,它们之间可能有空位。因此,整个结构存储单元的数量,不一定是各成员长度的简单累计。其大小的应当用sizeof来计算。引起结构存储问题的原因,是各成员的类型不同,占用空间大小不同,为了程序执行的效率,计算机对于基本类型的数据通常都有规定的摆放方式。如对用两字节表示的整数,通常要求它从偶数地址的单元开始存放。这些关于对象内存存放位置的要求,一般称作“对齐”。8 8.2 2 结结构构142.结构变量的初始化和使用u 结构变量的初始化l概念 和一般变量、数组一样,结构变量和结构数组也可以在定义的同时初始化。l实现 对结构提供初始值的表示形式与对数组提供初始值一样,使用 将变量的成员的初始化值组合起来实现初始化。l实例 struct point double x,y;p3=1.5,2.5,3.4,2.4,8.6,9.0,p1=1.5,4.6;8 8.2 2 结结构构15u说明初始化描述中的初始值将顺序提供给结构变量的各基本成员。初始化表达式只能是可静态求值的表达式。给出的初始化数据与结构成员类型一致,个数不得多于成员数量,如果提供的数据项不够,与数组一样,其余成员自动用 0 初始化。如果定义时没有提供初始值,系统对结构变量的处理方式与其他变量一样。外部和全局变量,用 0 初始化,自动变量不进行初始化,各成员的状态不确定。8 8.2 2 结结构构16结构数组初始化时,结合结构和数组初始化的方法。也可以像数组初始化一样,由初始化结构元素的个数决定数组的大小。例:struct bookcard char num6;float money;bk=NO.1,55.6,NO.2,90.5,NO.3,22.5 ;8 8.2 2 结结构构17u 结构变量操作l整体赋值同样类型的结构变量,可整体进行相互赋值,效果是相应成员分别进行赋值。例如:s1 和 s2 是两个结构变量,它们的类型相同,则可用 s2s1 将 s1 结构的各成员赋值给 s2 的相应成员。8 8.2 2 结结构构18l结构成员引用结构成员引用的两个运算符 .和-点号.称成员运算符,箭头-称结构指向运算符,这些运算符在 C语言的运算符中优先级最高,自左向右结合。结构中简单变量成员的引用三种形式名字引用:结构变量名结构变量名.成员名成员名;指针引用:结构指针结构指针
展开阅读全文
温馨提示:
金锄头文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
相关资源
正为您匹配相似的精品文档
相关搜索

当前位置:首页 > 中学教育 > 初中教育


电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号