版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 C语言程序设计,第 9 讲,第9章编译预处理、结构体和共用体,掌握有关编译预处理的知识。 掌握对简单的结构体的运用。 了解有关共用体的知识。,目标要求,第9章编译预处理、结构体和共用体,编译预处理 结构体 共用体 小结 课后作业,讲课提纲,第9章编译预处理、结构体和共用体,9.2.1 宏定义 9.2.2 文件包含与条件编译,9.2 编译预处理,第9章编译预处理、结构体和共用体,9.3.1 结构体的定义 9.3.2 定义结构变量 9.3.3 结构变量初始化 9.3.4 结构变量成员的访问,9.3 结构体,第9章编译预处理、结构体和共用体,宏定义的格式 宏定义有两种形式:带参数的宏和不带参数的宏
2、。 不带参数的宏。 基本格式: #define 宏名 宏体 带参数的宏。 基本格式: #define 宏名(参数1,参数2) 宏体,9.2.1 宏定义,第9章编译预处理、结构体和共用体,不带参数的宏的执行。 程序中以“宏名”形式出现的内容都用“宏体”代替(引号中的内容除外)。 例如,有以下定义: #define PI 31415926 则在程序中所有的符号“PI”都用31415926来代替。 带参数的宏的执行。 对于带有参数形式的“宏”,其功能得到了增强,其用法与函数相似。在处理带参数的“宏”时,系统分两步执行,即先用宏体替换掉宏名,再用参数的实际值替换掉参数。,9.2.1 宏定义,第9章编译
3、预处理、结构体和共用体,注意事项 在使用宏进行程序设计时,必须注意以下问题: 同一个宏名不能重复定义,并且定义中的3部分必须以空格隔开。 为了便于区别“宏名”与“变量名”,“宏名”一般习惯用大写字母,这是一种约定俗成的做法。 如果“宏体”较长,不能写在一行内,可以使用“”来表示宏体的换行。 宏替换只能替换简单的函数,此处的简单性包括形式上的简单(即语句较少,无复杂流程控制),也包括实现过程的简单,如不能包含递归过程等。,9.2.1 宏定义,第9章编译预处理、结构体和共用体,注意事项 宏替换只是用宏名来代替1个字符串,并不对字符串的内容进行检查,因此也不存在类型的区别,即是说程序编译时不会作任何
4、语法上的检查。 在定义宏的过程中,“宏体”可以是前面已经定义过的“宏名”,这样能够实现宏的层层置换。 对程序中双引号里面的字符串,即使内容与宏名相同,也不进行替换。如1个程序中有以下定义和语句: #define MAX 10 printf(“The MAX is:%d”,m); 其中加黑的“MAX”不会被替换成“10”,因为此处的“MAX”在输出语句的引号之内,是要原样输出的。 宏替换不像函数调用要占运行时间,它只占编译时间。注意:宏定义也不占用内存空间。,9.2.1 宏定义,第9章编译预处理、结构体和共用体,文件包含 文件包含主要有以下两种格式: #include:使用这种格式时,系统将到存
5、放C语言库函数头文件所在的目录中查找要包含的文件。 #include “文件名”:使用这种格式时,系统先到用户保存C程序文件的当前目录中寻找要包含的文件,如果找不到,再到存放C语言库函数头文件所在的目录中查找要包含的文件。 例如:若在某程序文件中含有如下命令: #include,9.2.2 文件包含与条件编译,第9章编译预处理、结构体和共用体,结构体的定义格式 在结构体的定义中包含了各个数据成员的基本信息,它的一般形式为: struct 结构体名 数据类型1 成员名1; 数据类型2 成员名2; 数据类型n 成员名n; ;,9.3.1 结构体的定义,第9章编译预处理、结构体和共用体,用法说明 关
6、于结构体的定义作如下说明: “struct”为结构体类型定义的关键字,结构体名是此结构体的类型标识。 结构体名(例如data)也是一种标识符,因此其定义规则和变量名、数组名以及函数名相同。 结构体中的各成员必须用大括弧括起来组成结构体的成员列表,结构体内的成员可以是一般数据类型(字符型、实型、整型等);也可以是复杂的数据类型(如数组等);还可以是结构体类型。,9.3.1 结构体的定义,第9章编译预处理、结构体和共用体,结构变量的定义格式 struct 结构名 结构变量名=初值表; 例如: struct data data1,data2; 其中: struct:结构体的标识符。 data:结构体
7、名称。 data1,data2:两个具体的结构体变量。 定义结构变量后,该变量包含的所有成员就会被分配相应大小的存储空间。,9.3.2 定义结构体变量,第9章编译预处理、结构体和共用体,在定义结构体的同时也可以定义结构变量 例如: struct data char name20; short age; char address80; float wage; data1,data2; 在定义结构体的同时定义了两个结构变量data1和data2。,9.3.2 定义结构体变量,第9章编译预处理、结构体和共用体,在结构体定义时省略结构名 例如: struct char name20; short ag
8、e; char address80; float wage; wang,li,zhang; 这种定义方法简单明了但是由于省略了结构名,在定义语句之外无法定义新的结构变量。,9.3.2 定义结构体变量,第9章编译预处理、结构体和共用体,结构数组 仿照基本数据类型的用法,在定义结构体后,具有相同数据类型的结构变量也可以组成结构数组。 结构数组的格式: struct 结构名 结构数组名元素个数; 例如: struct data man3; 其中man3由man0、man1、man2组成,每个元素都是以data为结构类型的结构变量。,9.3.2 定义结构体变量,第9章编译预处理、结构体和共用体,结构数
9、组 仿照基本数据类型的用法,在定义结构体后,具有相同数据类型的结构变量也可以组成结构数组。 结构数组的格式: struct 结构名 结构数组名元素个数; 例如: struct data man3; 其中man3由man0、man1、man2组成,每个元素都是以data为结构类型的结构变量。,9.3.2 定义结构体变量,第9章编译预处理、结构体和共用体,结构变量可以在定义的同时进行初始化,即使用一对大括弧包围的初值表对结构变量的每个成员赋值,其用法和数组类似。 例如: struct data wang“wangwei”,20,“建设路”,2234.5; 初始化后,将字符串“wangwei”赋给结
10、构变量wang成员name;将整数20赋给结构变量wang成员age;将字符串“建设路”赋给结构变量wang成员address;将实数2234.5赋给结构变量wang成员wage。,9.3.3 结构变量初始化,第9章编译预处理、结构体和共用体,对于结构体的定义是很灵活的,总结结构定义的几种形式如下: 省略“结构体名”。 struct int num; char name20; int age; float score; a3;,9.3.3 结构变量初始化,第9章编译预处理、结构体和共用体,先说明结构体类型,再单独进行变量的定义。 struct person int num; char name
11、20; int age; float score; ; struct person a3;,9.3.3 结构变量初始化,第9章编译预处理、结构体和共用体,结构体初始化的另一种方法。 struct person int num; char name20; int age; float score; a3=001,“zhanqian”,17,86.5,002,“lijuan”,17,92,003,“chenyong”,18,91.5;,9.3.3 结构变量初始化,第9章编译预处理、结构体和共用体,对结构体变量进行定义和初始化后,就可对其中的成员进行引用。C语言规定对结构体变量的成员进行赋值、引用、
12、输出时不能整体进行,因为它的各个成员之间是相互独立的,要引用其成员,可以使用两种运算符: 点运算符“”。 指针运算符“”。,9.3.4 结构变量成员的访问,第9章编译预处理、结构体和共用体,使用点运算符“”访问结构变量成员。 对于结构变量,要通过成员运算符“”逐个访问其成员,且访问的格式为: 结构变量成员。 点运算符在所有的运算符中优先级最高,如果成员本身又是一个结构体类型,则可以用若干个点运算符一级一级地找到最低一级的成员,这里有点顺藤摸瓜的感觉。在实际的运用中,我们通常对最底层成员的进行赋值、存取以及运算。对于【例9-4】中的结构变量还可以使用以下方式进行初始化: a0.num=001;
13、=“zhanqian”; a0.age=17; a0.score=86.5;,9.3.4 结构变量成员的访问,第9章编译预处理、结构体和共用体,使用指针运算符“”访问结构变量的成员。 使用指针不但可以访问普通变量和数组,使用指针来访问结构变量更能体现出简洁、高效的特点。 取地址运算。 使用“ /*将指针指向结构数组*/,9.3.4 结构变量成员的访问,第9章编译预处理、结构体和共用体,使用指针访问结构变量的成员。 通过指向结构变量的指针来访问结构变量的成员,与使用点运算符“”访问结构变量成员的效果一样。基本形式为: 结构变量名成员名 一般地说,如果指针变量pointer已指向结构
14、变量var,则以下3种形式等价: var.成员。 pointer-成员。 (*pointer).成员 /*“*pointer”外面的括弧不能省!*/。,9.3.4 结构变量成员的访问,第9章编译预处理、结构体和共用体,必须注意 在第1种格式中,分量运算符左侧的运算对象,只能是结构变量。 而在第2种格式中,指向运算符左侧的运算对象,只能是指向结构变量(或结构数组)的指针变量,否则都出错。,9.3.4 结构变量成员的访问,第9章编译预处理、结构体和共用体,共用体的定义 共用体也称为联合(体),用union表示,一般定义形式如下: union 共用体名 类型1 成员1; 类型2 成员2; 类型n 成
15、员n; 变量名;,9.4 共用体,第9章编译预处理、结构体和共用体,用法说明 “union”是共用体的标识符名,是关键字。 “共用体名”可有可无。 各个成员的数据类型可以不同,各个成员既可是简单的变量,又可是数组、指针等复杂变量。 同结构体类似,变量名是指定义的共用体变量的名称。,9.4 共用体,第9章编译预处理、结构体和共用体,共用体变量的引用和赋值 共用体变量的引用和赋值与结构体是一样的,读者可以参照结构体进行有关的操作,但值得指出的是: 共用体在定义时,只能对第1个成员进行初始化。 共用体中各成员的首地址相同。 对共用体中最近一次操作的变量才起作用,因为各成员共用一段内存空间,前几次的操
16、作已被最近的一次操作所覆盖。,9.4 共用体,第9章编译预处理、结构体和共用体,所谓位运算就是进行二进制位的运算。C语言提供了下列6种位运算符。 结构体中的成员名可以与程序中其它变量,包括其它结构体成员名一样,它们之间互不相关。注意结构体的定义以“;”结尾。结构体的定义很灵活,它有多种定义格式。,9.6 小结,第9章编译预处理、结构体和共用体,结构体变量的赋初值。 结构体变量赋初值时,C编译程序按每个成员在结构体中的顺序一一对应赋初值,不允许跳过前面的成员给后面的成员赋初值,但可以给若干个成员赋初值,对于未赋初值的成员,数值型和字符型数据系统自动赋初值为0或空。 结构体变量中的数据引用。 引用结构体变量中的成员一般有两种形式: 结构体变量名成员名 结构体指针-成员名,9.6 小结,第9章编译预处理、结构体和共用体,共用体 共用体类型说明和变量的定义方式和结构体的类型说明和变量定义方式相似,不同的是,结构体中的每个成员各自占有一段内存空间,而共用体所有成员共同使用一段存储空间。 共用体类型的一般形式: union 共用体标识名 类型名1 共用体成员名1; 类型名1 共用体成员名1; 类
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026湖南湘潭市市直公立医院高层次专业人才引进20人考试模拟试题及答案详解
- 2026年凯盛科技股份有限公司招聘1人笔试模拟试题及答案详解
- 2026年山东鲁泰控股集团有限公司社会公开招聘考试模拟试题及答案详解
- 2026应急管理部国家综合性消防救援队伍面向社会招录消防员(上海300人)考试模拟试题及答案详解
- 2026重庆大学土木工程学院劳务派遣工作人员招聘1人笔试备考题库及答案详解
- 2026年德州市第七人民医院公开招聘备案制工作人员(6名)考试模拟试题及答案详解
- 2026湖北武汉市中心城区区妇幼保健院招聘1人考试参考题库及答案详解
- 莆田东庄镇卫生院招聘乡村医生笔试模拟试题及答案详解
- 2026中国金融思想政治工作研究会招聘高校毕业生2人考试参考题库及答案详解
- 2026年亳州市蒙城县城区公办高初中学校县域内公开选调121名教师笔试备考题库及答案详解
- T/CBMCA 008-2019聚氯乙烯(PVC)瓦
- 《慢性阻塞性肺疾病诊疗策略》课件
- 人教版(2024)七年级下册生物期末复习重点知识点提纲
- 2024-2025学年人教版(2024)初中英语七年级下册(全册)知识点归纳
- 2020年WHO骨肿瘤分类
- 妇幼保健院患者投诉处理考核试卷
- 《液位传感器》课件
- 内科学(呼吸-循环-消化)知到智慧树章节测试课后答案2024年秋温州医科大学
- 《思想道德与法治》期末复习主要知识点
- 大部分分校:地域文化形考任务二-国开(CQ)-国开期末复习资料
- 国家开放大学Python程序设计形考任务实验六-互联网评论数据分析及其展示综合案例
评论
0/150
提交评论