谭浩强c语言配套课件第八章

上传人:wm****3 文档编号:52084117 上传时间:2018-08-18 格式:PPT 页数:62 大小:574KB
返回 下载 相关 举报
谭浩强c语言配套课件第八章_第1页
第1页 / 共62页
谭浩强c语言配套课件第八章_第2页
第2页 / 共62页
谭浩强c语言配套课件第八章_第3页
第3页 / 共62页
谭浩强c语言配套课件第八章_第4页
第4页 / 共62页
谭浩强c语言配套课件第八章_第5页
第5页 / 共62页
点击查看更多>>
资源描述

《谭浩强c语言配套课件第八章》由会员分享,可在线阅读,更多相关《谭浩强c语言配套课件第八章(62页珍藏版)》请在金锄头文库上搜索。

1、C语言程序设计 谭浩强结构体和共用体第十一章第十一章 结构体和共用体11.1 结构体的说明和定义11.2 结构体成员的引用与结构体变量的初始化11.3 结构体数组11.4 结构体指针11.5 结构体在函数间的传递11.6 结构体型和结构体指针型函数11.7 共用体简介 11.8 枚举类型11.9 用typedef定义类型11.10 习题11.1 结构体的说明和定义在程序的设计中, 会遇见一些关系密切、具有内在联系而且数据类型 不同的数据。例如, 一个班、一个年级或全校学生的学籍卡包括:他们 的学号、姓名、性别、年龄、学习成绩、地址 等。这些数据有的是数 字、有的是字符,其数据类型不同, 对于这

2、样一类数据可以用结构体来处理。11.1.1 结构体的概念结构体是不同数据类型的数据的集合。 结构体是构造类型的数据。一个结构体由若干成员组成。它是组成结构体的要素 。每个成员的数据类型可以不同,也可以相同。每个 成员有自己的名字。 对结构体数据的操作是通过对结构体成员的引用实现 的。结构体的应用为处理复杂的数据结构体提供了有利的手段。特别是对处理那些数据结构比较复杂的程序提供了方便。每一个结构体有一个名字, 所有成员都组织在该名字之下。 结构体名结构体成员名11.1.2 结构体的说明由于结构体是由不同数据类型的数据组成的集合体。它包含若干成员。因此, 在使用结构体进行数据处理时, 首先应对结构

3、体的组成进行描述。这种描述称为结构体说明。结构体说明实质上是构造一个结构体。说明的是结构体是由哪些成员组成以及成员的数据类型。结构体说明的格式:struct (是保留字)结构体类型标识符。结构体名(称结构体类型名)由标识符组成。 大括号中的结构体成员表, 称为结构体。结构体成员表包含若干成员。struct 结构体名 结构体成员表; ; 成员的表达形式:数据类型标识符 结构体成员名;成员的数据类型例:用结构建立学生的学籍卡(数据体)。struct student long num;char name20;char sex;int age;float score;char addr30; stud

4、ent1,student2, ;student1 student2 student30 结构体变量名结构体成员名结构体名结构体类型标识符有关结构体说明应注意以下几点:1) 结构体说明描述了结构体的组织形式, 在程序编译时并不 为它分配存储空间。2) 结构体成员可以是简单变量、数组、指针、结构体或联合 体等。所以,结构体可以嵌套使用, 即一个结构体变量也 可以成为另一个结构体的成员。 3) 结构体说明可以在函数内部, 也可以在函数外部。4) 若程序规模较大,可把其结构体说明部分作为文件存放起 来(该文件是以.h为后缀的“头文件”),这样可借助于 “#include”预编辑语句把它复制到任何源文件

5、中,用以定 义同类型的其它结构体变量。 5) 结构体成员名可以与程序中其它变量同名, 系统会自动识 别它们, 两者不会混淆。student1struct date int month;int day;int year; 定义一个struct date结构体,它代表 日期包括三个成员, month(月)、day(日)、year(年)。结构体成员可以是另一结构体变量struct student long num;char name20;char sex;int age;float score; char addr30;struct date birthday; ;在定义struct student

6、 结构体时, 成员birthday被定义struct date类型。 即结构体成员为另一结构体变量。 已定义的(结构)类型struct date 与其他类型(int 、char)一样可以用来 定义结构体成员的类型。例:成员name、addr是数组类型11.1.3 结构体变量的定义结构体变量同其它变量一样也必须先说明、定义, 然后才能引用。结构体变量定义要按照结构体说明中的结构体类型, 为被定义的结构体变量分配内存单元, 而结构体说明不分配内存。对结构体中数据(结构体成员)的操作是通过结构体变量的引用来实现的。用结构体变量可以对结构体成员进行赋值、存取或运算。1、结构体变量的作用2、结构体变量定

7、义的意义例如:struct student int num;char name20;char sex;int age;float score;char addr30; student1,student2,student3;(1) 在结构体说明的同时定义结构体变量该例结构体名为student,用它定义了三个结构 体变量student1、student2、student3,三个变 量具有相同的组成结构体,即相同的类型。这种定义方法的特点是:定义一次结构体变量之后,在该定义之后的任何位置还可用该结构体类型来定义其它结构体变量。3、结构体变量定义格式结构体变量定义的三种形式: struct 结构体名

8、结构体成员表; 结构体变量名表;其定义格式为:例如: struct int num;char name20;char sex;int age;float score;char addr30; student1,student2,student3; 不出现结构体名这里定义了三个结构体变量与(1)相同。 这种定义方法的特点是:struct 结构体成员表; 结构体变量名表;(2) 直接定义结构体变量其定义形式为:不出现结构体名这种定义方法的特点是:不能在别处用来另行定义别的结构体变量,要 想定义就必须将struct 这部分重写。例如: struct student int num;char name

9、20;char sex;int age;float score;char addr30; ; struct student student1,student2,student3; 这种定义方法的特点是: 可把其结构体说明部分作为文件存放起来, 这样可借助于“#include”预编辑语句把它复制 到任何源文件中,用以定义同类型的其它结 构体变量。struct 结构体名 结构体成员表;. 存贮类型 struct 结构体名 结构体变量名表;(3) 把定义和说明分开其定义格式为:1)注意结构体声明和结构体变量定义的区别。 2)每个结构体变量表示的是一组(域)成员(数据)。而不是一个数据。 3)每个结构

10、体中所有结构体变量的结构(类型)是一样的。4)在一个结构体中可以定义多少个结构体成员。 5)结构体变量的定义一定要在结构体说明之后或与结构体说 明同时进行。 6)结构体变量一般不用register寄存器型的存储方式。7)结构体变量中的成员可以单独使用,其作用和地位与一般 变量相同。 8)结构体变量占用实际内存的大小可用sizeof( )运算来实现。 即:sizeof(结构体名)。结构体变量的定义应注意的几点:11.2 结构体成员的引用与结构体变量的初始化结构体成员引用有三种方式:11.2.1 结构体成员的引用(2) 用指针的方式(1) 用结构体成员运算符方式定义一个指针结(构体指针), 使它指

11、向该结构体变量, 这时就可用指针和成员名来引用结构体成员了。即:结构体变量名. 成员名 。(3) 用“-”指向运算符引用结构体成员定义一个指针(结构体指针), 使它指向该结构体变量, 这时就可用指 针和成员名来引用结构体成员了。其格式为:指针名-结构体成员名 例:struct student long num;char name20;char sex;int age;float score;char addr30; stu1,stu2;结构体成员的引用:用结构成员运算符“.”引用结构体成员 struct student stu1;struct student stu2;stu1.num=201

12、0001;stu1.sex=M;stu1.age=18;stu1.score=87;Strcpy(stu1.addr,“Beijing”);用结构成员运算符“.”引用结构体成员格式:“.” 结构体成员运算符结构体成员运算符就表示对结构体成员的引用结构体变量名 . 结构体成员(2) 不能将一个结构体变量作为一个整体加以引用。(3) 对结构体成员的操作与其它变量一样,可进行各种运算。结构体成员引用的几点说明:例:stu1.num 作为一个整体来看待,并对其操作。 *stu1.num “.”优先于“*”,其等效为 *(stu1.num)。其含义为访问stu1.num(所指地址中的内容)的目标变量。赋

13、值运算: stu1.score=stu2.score; 算术运算: sum=(stu1.score+stu2.score)/2; 自加减运算:stu1.age+; +stu1.age; 关系运算: stu1.age=stu2.age;例:printf(“%d,%s,%c,%d,%f,%s”,stu1); (1) 结构体成员运算符“.”的优先级最高,结合性为左结合(从左至右)。用结构体成员运算符11.2.2 结构体变量的初始化结构体变量初始化的格式:对结构体变量初始化应注意几点:(1)只能对存储类型为extern外部型和static静态型结构体变量初始化,不能对存储类型为auto自动型的结构体变

14、量初始化。(2)初始化数据与数据之间用逗号隔开。(3)初始化数据的个数要与被赋值的结构体成员的个数相等。(4)初始化数据的类型要与相应的结构体成员的数据类型一致。(5)不能直接在结构体成员表中对成员赋初值。结构体变量的初始化,就是在定义结构体变量的同时,对其成员赋初值。规定,只准许对外部和静态结构体变量进行初始化,不能对自动 类型的结构体变量初始化。struct 结构体名 结构体变量名= 初始数据 ;例: struct student long num;char name20;char sex;int age;float score;char addr30; ; struct student

15、stu1=2010001, “Li feng”, M, 18, 87.0, “Beijing”; struct student long num=2010001;char name20=“Li feng”;char sex=M;int age=18;float score=87.0;char addr30=“Beijing”; stu1,stu2;不能直接在结构体成员表中对成员赋初值例11-1 用scanf函数将结构体变量数据输入,用printf函数将其输出。 main( ) struct student long num;char name20;char sex;float score;ch

16、ar addr30;struct student stu1;scanf(“%c“,scanf(“%ld“,scanf(“%s“,stu1.name);scanf(“%f“,scanf(“%s“,stu1.addr);printf(“nnum:%ldn“,stu1.num);printf(“name:%sn“,stu1.name);printf(“sex:%cn“,stu1.sex);printf(“score:%.2fn“,stu1.score);printf(“addr:%sn“,stu1.addr); 运行程序M 2010001 Li feng 87 Beijingnum:2010001 name

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

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