上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 12 结构、联合与枚举

lecture 12 一结构、联合、枚举 绳伟光 上海交通大学微纳电子学系 2017年04月14日 ERS
lecture 12 —— 结构、联合、枚举 绳伟光 上海交通大学微纳电子学系 2017年04月14日

内容 ■结构 ■联合 ■枚举 君 2
结构 联合 枚举 内容 2

结构(Structure) 结构是另一种聚集类型,与数组有如下区别: 结构的组成元素称为成员(members),成员的类型 不必是相同的 结构的每个成员都有名字,各成员是通过名字访问 的,而不是像数组通过位置访问 ■在其它一些语言中,结构也被称作记录 (records)),其成员被称作域(fields) ■结构适合将一些有关联的数据组织为一个整体
结构(Structure) 结构是另一种聚集类型,与数组有如下区别: 结构的组成元素称为成员(members),成员的类型 不必是相同的 结构的每个成员都有名字,各成员是通过名字访问 的,而不是像数组通过位置访问 在其它一些语言中,结构也被称作记录 (records),其成员被称作域(fields) 结构适合将一些有关联的数据组织为一个整体 3

声明结构变量 ■下面声明两个结构变量part1和 : part2,存储仓库中零件信息: 2000 2001 struct number 2002 int number; 2003 char name [NAME LEN+1]; int on hand; 2004 partl,part2; name 2029 右侧为part1的内存映像 2030 必各个成员依次存储 2031 numberp占据4个字节 on hand 2032 %name占据25个字节 2033 on_hand占据4个字节 4
声明结构变量 下面声明两个结构变量part1 和 part2,存储仓库中零件信息 : 右侧为part1的内存映像 各个成员依次存储 number占据4个字节 name占据25个字节 on_hand占据4个字节 struct { int number; char name[NAME_LEN+ 1]; int on_hand ; } part1, part2 ; 4

结构的抽象 结构可以按照下面两种方式予以图示: number name number name on hand on hand ■ 每个结构表示一个新的作用域(Scope),也就是说,每 个结构开始了一个新的名字空间(Name Space),该空 间中的名字不会与其它空间的同名名字冲突 5
结构的抽象 结构可以按照下面两种方式予以图示: 每个结构表示一个新的作用域(Scope),也就是说,每 个结构开始了一个新的名字空间(Name Space),该空 间中的名字不会与其它空间的同名名字冲突 5

结构的名字空间示例 如下两类结构中的同名成员不会冲突: struct int number; char name [NAME_LEN+1]; int on hand; partl,part2; struct char name [NAME LEN+1]; int number; char sex; employee1,employee2; 6
结构的名字空间示例 如下两类结构中的同名成员不会冲突: struct { int number; char name[NAME_LEN+1]; int on_hand; } part1, part2; struct { char name[NAME_LEN+1]; int number; char sex; } employee1, employee2; 6

结构变量的初始化 结构变量同样可以在声明时初始化: struct int number; char name [NAME LEN+1]; int on hand; part1 {528,"Disk drive",10}, part2 {914,"Printer cable",5}; part1的内存映像: number 528 name Disk drive on hand 10 7
结构变量的初始化 结构变量同样可以在声明时初始化: part1的内存映像: struct { int number; char name[NAME_LEN+1]; int on_hand; } part1 = {528, "Disk drive", 10}, part2 = {914, "Printer cable", 5}; 7

结构变量的初始化(续) 结构初始化中的表达式必须是常量表达式(C99放松了 此限制) ■可以只初始化部分成员, 剩余成员默认进行0初始化 C99也支持结构的指定初始化 {number 528,name "Disk drive",.on_hand 10} 指定初始化式中点和其后的成员名称一起称为指示器 (designator) 指定初始化时各成员初始化顺序不重要 两种初始化方式可混用 number 528,"Disk drive",on hand 10) 如初始化器出错未能完成初始化,则进行0初始化
结构变量的初始化(续) 结构初始化中的表达式必须是常量表达式(C99放松了 此限制) 可以只初始化部分成员,剩余成员默认进行0初始化 C99也支持结构的指定初始化 指定初始化式中点和其后的成员名称一起称为指示器 (designator) 指定初始化时各成员初始化顺序不重要 两种初始化方式可混用 如初始化器出错未能完成初始化,则进行0初始化 {.number = 528, .name = "Disk drive", .on_hand = 10} {.number = 528, "Disk drive", .on_hand = 10} 8

访问结构成员 访问结构成员:结构变量名+''+成员名 printf("Part number:%d\n",part1.number); printf("Part name:%s\n",part1.name); printf("Quantity on hand:%d\n",part1.on_hand); 结构成员可以作为左值 part1.number =258;/changes spart1's part number part1.on hand++;/increments part1's quantity on hand 点号在C中是一个实实在在的运算符,其优先级高于 几乎所有运算符,比如如下的访问没有任何问题,' 的优先级高于&: scanf("%d",&part1.on_hand); 9
访问结构成员 访问结构成员:结构变量名+'.'+成员名 结构成员可以作为左值 点号在C中是一个实实在在的运算符,其优先级高于 几乎所有运算符,比如如下的访问没有任何问题,'.' 的优先级高于'&': printf("Part number: %d\n", part1.number); printf("Part name: %s\n", part1.name); printf("Quantity on hand: %d\n", part1.on_hand); part1.number = 258; /* changes part1's part number */ part1.on_hand++; /* increments part1's quantity on hand */ scanf("%d", &part1.on_hand); 9

结构赋值 结构变量可直接用于赋值: part2 part1; ■ 结构赋值的语义是逐成员复制到对应成员 讲到数组时说数组不可以直接互相赋值,但数 组作为结构成员时是可以用=赋值的,因此有 下述惯用法: struct int a[10];a1,a2; a1 a2;/legal,a1 and a2 are structures ■上述定义的结构称为哑(dummy)结构 10
结构赋值 结构变量可直接用于赋值: part2 = part1; 结构赋值的语义是逐成员复制到对应成员 讲到数组时说数组不可以直接互相赋值,但数 组作为结构成员时是可以用=赋值的,因此有 下述惯用法: 上述定义的结构称为哑(dummy)结构 struct { int a[10]; } a1, a2; a1 = a2; /* legal, a1 and a2 are structures */ 10
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 11 字符串.pdf
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 10 C程序调试.pdf
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 01 课程简介及编程基础(绳伟光).pdf
- 机械工业出版社:计算机科学丛书《计算机组成与设计:硬件、软件接口》电子教材(中文第4版).pdf
- 《计算机系统结构》课程教学资源(电子书籍)《Computer Systems》A Programmer's Perspective(Randal E. Bryant、David R. O'Hallaron,THIRD EDITION).pdf
- 《计算机系统结构》课程教学资源(电子书籍)《Computer Organization and Design》THE HARDWARE / SOFTWARE INTERFACE(DAVID A. PATTERSON JOHN L. HENNESSY,Fourth Edtion,彩色版).pdf
- 《中文信息学报》:中文组织机构名称与简称的识别.pdf
- 上海交通大学:《C++程序设计与实践》课程教学资源(讲义)方波生成器项目报告书.doc
- 上海交通大学:《C++程序设计与实践》课程教学资源(讲稿)第8讲 Windows应用程序设计.pdf
- 上海交通大学:《C++程序设计与实践》课程教学资源(讲稿)第7讲 C++类(2/2).pdf
- 上海交通大学:《C++程序设计与实践》课程教学资源(讲稿)第6讲 C++类(1/2).pdf
- 上海交通大学:《C++程序设计与实践》课程教学资源(讲稿)第5讲 指针与引用.pdf
- 上海交通大学:《C++程序设计与实践》课程教学资源(讲稿)第4讲 数组与结构.pdf
- 上海交通大学:《C++程序设计与实践》课程教学资源(讲稿)第3讲 函数与结构化程序设计.pdf
- 上海交通大学:《C++程序设计与实践》课程教学资源(讲稿)第2讲 C++程序的流程控制.pdf
- 上海交通大学:《C++程序设计与实践》课程教学资源(讲稿)第1讲 C++语言概述及数据类型(何其昌).pdf
- 上海交通大学:《C++程序设计与实践》课程教学资源(课件讲稿)总复习(共八讲).pdf
- 上海交通大学:《C++程序设计与实践》课程教学资源(学习资料)基于MFC的对话框程序.pdf
- 上海交通大学:《C++程序设计与实践》课程教学资源(学习资料)C++练习(答案).pdf
- 上海交通大学:《C++程序设计与实践》课程教学资源(学习资料)C++练习(题目).pdf
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 13 高级指针.pdf
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 14 内存检测、剖面分析.pdf
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 15 输入输出.pdf
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 02 C语言简介.pdf
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 03 C语言数据类型.pdf
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 05 C语言语句.pdf
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 06 C语言数组.pdf
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 07 函数.pdf
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 08 指针.pdf
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 09 C程序组织.pdf
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 01 算法设计与分析基础.pdf
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 01 Greedy and Dynamic Programming.pptx
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 02 Divide and Conquer.pptx
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 04 C语言运算符与表达式.pdf
- 《C程序与算法设计》课程教学资源(学习资料)快乐的Linux命令行.pdf
- 上海交通大学:《ROS机器人操作系统基础与实战》课程教学资源(实验指导书)01 ROS系统安装.doc
- 上海交通大学:《ROS机器人操作系统基础与实战》课程教学资源(实验指导书)02 ROS基本元素实验(一).doc
- 上海交通大学:《ROS机器人操作系统基础与实战》课程教学资源(实验指导书)03 ROS基本元素实验(二).doc
- 上海交通大学:《ROS机器人操作系统基础与实战》课程教学资源(实验指导书)04 调试和可视化.doc
- 上海交通大学:《ROS机器人操作系统基础与实战》课程教学资源(实验指导书)05 外部设备的使用.doc