当前位置:高等教育资讯网  >  中国高校课件下载中心  >  大学文库  >  浏览文档

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

资源类别:文库,文档格式:PDF,文档页数:58,文件大小:994.92KB,团购合买
点击下载完整版文档(PDF)

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

点击下载完整版文档(PDF)VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
共58页,可试读20页,点击继续阅读 ↓↓
相关文档

关于我们|帮助中心|下载说明|相关软件|意见反馈|联系我们

Copyright © 2008-现在 cucdc.com 高等教育资讯网 版权所有