资源预览内容
第1页 / 共38页
第2页 / 共38页
第3页 / 共38页
第4页 / 共38页
第5页 / 共38页
第6页 / 共38页
第7页 / 共38页
第8页 / 共38页
第9页 / 共38页
第10页 / 共38页
亲,该文档总共38页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
42 结构体421 结构体的概念一个数组由类型相同的元素组成,但有些数据类型可 能由性质不同的成员组成,这些成员相互关联组成一个整 体数据。例如,一个职工的工作证号(number)、姓名 (name)、性别(sex)、 年龄(age)、部门(department)、 工资(wage)等,这些成员都属于某个职工的数据项,如果 分别定义成相互独立的变量,则不能体现它们之间的内在 联系,而在程序中应该把它们视为同一个数据类型的成员 。 第4章 构造型数据类型之 结构体第4章 构造型数据类型之 结构体利用C语言的结构体类型就可完成这一功能。例如:struct staff char number8;char name10;char sex;int age;char dep20;float wage2;number 数组name数 组sex 成员age成 员dep成 员wage成 员struct staff这样定义的结构体所需的空间 是每个成员所需空间之和。这 个struct staff共需要47个字节第4章 构造型数据类型之 结构体以上定义了一个结构体类型struct staff ,它包含了number、name、sex、age、 dep、wage等不同类型的数据项。这样就 可在程序中使用struct staff类型的变量, 把一个职工的相关信息合在一起,组成一 个整体来处理。 此时,就可以用struct staff这个类型定义 出变量。第4章 构造型数据类型之 结构体例如下面程序段:struct staff worker; *定义一个structstaff类型的变量worker *worker.sexM; *给worker变量的sex成员赋值M*strcpy(worker .name,”李大磊”); *给worker变量的name成员赋值”李大磊”*printf(“姓名:%s性别:%cn”,worker.name,worker.sex); *输出worker变量的数据*第4章 构造型数据类型之 结构体42.2 结构体类型及结构体变量1结构体类型说明的一般形式struct 结构体名类型名1 结构体成员名表1;类型名2 结构体成员名表2;类型名n 结构体成员名表n;第4章 构造型数据类型之 结构体说明:(1)结构体类型名和结构体变量名由用户命名,命名规则与标识符命名 规则相同(即与变量命名规则相同)。(2)每个“结构体成员名表”都可以含有多个相同类型的成员名,它们之 间以逗号隔开。结构体成员的命名规则与变量名的命名规则相同。结 构体成员名允许与该结构体外的变量重名,不同结构体中的成员也可 以同名,它们代表不同的对象,互不干扰。(3)结构体成员的类型可以是基本类型、数组、共用体、指针、空类型 或已说明过的结构体类型等。(4)其中struct是C语言的关键字,是结构体类型的引导字,用于说明结 构体类型以及定义结构体变量。 第4章 构造型数据类型之 结构体(5)结构体说明的花括号后要以分号“;”结尾。例如一本书有书号、书名、作者、价格、简介等数据项, 可以定义书的结构体类型如下:struct book_type int num;char name60;char writer30; float price;char brief300; ; 这个分号不能少第4章 构造型数据类型之 结构体结构体成员也可以是一个结构体变量,即结构体允许嵌套结构。例如:下面语句定义了一个有嵌套结构的结构体。struct date unsigned char month; unsigned char day; unsigned year; struct staff char number8;char name10;struct date birthday;int age; char dep20;float wage2; 结构体类型说明只是说明了一个构 造型数据类型,系统没有分配任何存 储空间。必须定义相应结构体类型的 变量,系统才为该变量分配存储空间 。类型与变量是不同的概念。 第4章 构造型数据类型之 结构体2结构体变量的四种定义方式 (1)紧跟在类型说明之后定义变 量、数组例如:struct book_typeint num;char name60;char writer30;float price;char brief300;bookl,books3;此处:在说明结构体类型struct book_type的同时,定义了一个结 构体变量bookl与一个结构体数组 books,数组books有三个元素: books0、books1、books2。 这种定义变量的一般形式为:struct 结构体名结构体成员表变量名表;第4章 构造型数据类型之 结构体(2)先说明结构体类型,再单独进行变 量、数组定义例如:struct staffchar number8;char name10;int age;char dep20;float wage2;struct staff worker1,worker2;此处先说明了结构 体类型struct staff ,再由另条语句 定义变量workerl与 worker2为struct staff类型的变量。 第4章 构造型数据类型之 结构体(3)说明一个无名结构体类型,直接 定义变量、数组例如:structunsigned char month;unsigned char day;unsigned year; workerl,worker2,d15;以上说明结构体类型时 省略了结构体类型名, 直接定义结构体数组d1 与结构体变量worker1、 worker2。若程序中不需 要再次定义该结构体类 型的变量,可用这种方 式一次性定义变量。第4章 构造型数据类型之 结构体(4)用typedef说明一个结构体类型名,再用 类型名进行变量定义(详见本章45节)。第4章 构造型数据类型之 结构体423 结构体变量的使用结构体是一个构造型数据类型,由此定义的结构体变量的 成员,也可以像其他类型的变量一样被赋值,参与表达式 运算以及用于输入、输出等操作。1结构体变量成员的使用结构体变量成员的表示方式为:结构体变量名成员名第4章 构造型数据类型之 结构体运算符“”称为结构体成员运算符,它在C语言中的 运算优先级的级别是最高的。可以把“结构体变量名成 员名”看成一个整体,则这个整体的数据类型与结构体中 该成员的数据类型相同,可以像使用一个简单变量一样使 用“结构体变量 名成员名”。对于多层嵌套结构体成员的使用,应按照从最外层到 最内层的顺序逐层使用成员名,每层成员名之间用结构体 成员运算符“”隔开,只能对最内层的成员进行存取、运 算以及输入、输出等操作。第4章 构造型数据类型之 结构体例48学生的数据包括学号、姓名、出 生日期、三门课成绩、总分及平均分。定 义一个结构变量,其中每个成员都从键盘 接收数据,然后计算总分及平均分,最后 输出该学生的所有数据。请注意这个例子 中不同类型的结构体成员的使用方法。第4章 构造型数据类型之 结构体#include #define ESC 27struct student_ typelong int num; *学号*char name10; *姓名*struct date_type int month;int day;int year;birthday; *出生日期*float score3,total,average; *三门课成绩、总分、平均分*第4章 构造型数据类型之 结构体main ( )struct student_type stu; *定义struct student_type类型的结构体变量stu *do printf(”请输入学生的学号、姓名、出生年、月、日及三门课学习成绩:n”);scanf(”1ds”, *书名* char author30; *作者*float price; *价格*struct datetpunsigned year;unsigned month;pubday; *出版日期*bookl”SQL-Server循序渐进教程”,”Petkovic”,35.0,1999,6 ,book2”VB开发指南”,”Dianne Siebold”;第4章 构造型数据类型之 结构体printf(”s,作者:s,出版日期:d年d月,价格:51fn”, booklname,booklauthor,booklpubdayyear,bookl pubdaymonth,booklprice); printf(”s,作者:s,出版日期:d年d月,价格:51fn”, book2name,book2author,book2pubdayyear,book2 pubdaymonth,book2price);上述程序段运行结果为:SQLServer循序渐进教程,作者:Petkovic,出版日期: 1999年6月,价格:350VB开发指南,作者:DianneSiebold,出版日期:0年0月 ,价格:00第4章 构造型数据类型之 结构体2结构体数组初始化结构体数组初始化的方法与数组的初始化 相类似。由于数组中的每个元素都是一个 结构 体,可以将每个元素中成员的初值 依次放在一对花括号内,以便区分各个元 素。例如:第4章 构造型数据类型之 结构体struct studenttpchar num10; ,char name10;float score;student3=“304001”,”张驰”,65,“304002”,”杨明”,78, “304005”,”王丰”,86 ; 第4章 构造型数据类型之 结构体也可以在初始化时不指定数组的长度,系统根据所赋初值的个数决 定数组元素的个数。例如下面的语句与上述语句等价:struct student_tpchar num10;char name10;float score;student=“304001”,”张驰”,65,“304002”,”杨明”,78, “304005”,”王丰”,86;初始化时内层的花括号可以省略,但省略后各元素的初值连成一片, 容易混淆。因此,一般不省略内层的花括号。第4章 构造型数据类型之 结构体425 位段有时只需要1位或几位就可以存储一个信息。例 如:“真”用1表示,“假”用0表示,只要1位就够存放 了,如果用字符(char)类型的变量来表示,要占用 内存一个字节(8位),浪费了存储空间。另外,有时 要存取一个或多个字节的某几位,或对一个或多个 字节的某几位进行位运算,虽然利用第二章中讲述 的按位运算可以完成这些操作,但较繁琐。利用C 语言提供的位段,可以解决上述问题。第4章 构造型数据类型之 结构体1位段的定义所谓位段是以位为单位定义变量占内存空 间的大小。C语言中没有专门的位段类型, 而是借助于结构体类型,以二进制位为单 位来说明结构体中成员所占空间的大小。第4章 构造型数据类型之 结构体例如: struct bit_fieldu
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号