- 1、本文档共52页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
09c结构与联合090405
C语言程序设计---第9章 第 8 章 结构与联合 ? 结构成员可以是任何基本数据类型, 也可以是数组、指针、联合、枚举类型变量 ? 结构类型可以嵌套定义, 即一个结构中的的一个或多个成员是其他结构类型的变量或指向结构变量的指针,但不能是自身结构的结构变量, 可以是指向自身结构的指针 ? 同一结构内成员的名称不能相同 ? 结构定义只是给出了结构的组织形式,并不占有存储空间 2)在定义类型的同时定义变量 3)无名定义(不出现结构标记) 例如: student1.num = 10010; student1.age++; printf(”%d\n”, student1.num); 9.5.3 结构型函数 9.7 结构与指针 union data { int i; char ch; float f; }; union data a,*p; 下面讨论指向结构数组的指针。 struct student { int num; char name[20]; char sex; }stu[20],*p; p=stu; 首先要注意,该指针变量的类型是数组元素的类型即相应的结构类型。 请问下面两个表达式 (++p)-num (p++)-num 的结果分别为何? 1001 ”LiuLi” ’F’ 1101 ”HeFei” ‘M’ 1201 ”WanLi” ’F’ stu[0] stu[1] stu[2] p 1101 1001 9.8 结构的存储分配 结构在内存中是如何存储的呢?其成员变量是如何安排空间的呢? 一般说来,编译器按照各个成员它们被声明的顺序一个接一个地给每个成员分配内存空间,第一个成员的地址和整个结构的地址相同。但是,为了提高运算效率,如有必要,编译器会自动进行结构成员变量的边界对齐。何谓边界对齐?由于时间关系,请同学们阅读教材。关于这方面更详细的讨论请查阅有关资料。 9.9 位段 9.9.1 为什么要引入位段 C语言提供了多种位操作,我们在4.3.1节已经作了介绍。位操作使得对字节或字按位存取成为可能。下面看一个例子: 设有五个数据的类型及其值域如下: b1 布尔值 b2 布尔值 b3 布尔值 value 取1~12之间的整数 index 取0~500之间的整数 1 1 1 4 9 可见,存储这五个数据共需16位。我们恰可定义一个整型变量: unsigned int intdata; 来存储这五个值。并可随意在intdata内部分配某些位用于存储这五个数据。下面就是一种分配: b1 b2 b3 value index 设0≤n≤15,下面的语句通过使用位操作把value域置为值n: Intdata=(intdata~(0xf9))|((n0xf)9) 设intdata的原值为: 0x55BA n的值为: 0xB 0101010110111010 0X55BA 下面我们用竖式计算上述表达式: : 1110000111111111 ~(0xf9) 0100000110111010 value域:首先被清为零,其他域不变. |: 0001011000000000 (n0xf)9 0101011110111010 n=0xB 置入value域 上面表达式中intdata~(0xf9) 仅是为了确保值n一定在0~15之间。若已知0≤n≤15,则表达式 Intdata=(intdata~(0xf9))|((n0xf)9) 可简化为下式: intdata|=n9 欲从intdata中提取value域的值送入n中,可用如下语句实现: n=(intdata9)0xf; 可见位操作不能将某一特定的数据域作为一个数据单位来存取。位字段提供了一个存取位域的方法。 位段提供了一个存取位域的简便方
您可能关注的文档
最近下载
- 耕地质量等级+(GBT+33469-2016).docx VIP
- 人教版高中物理必修一课件.pptx VIP
- 新生儿高胆红素血症诊治指南(2025)解读 (1)PPT课件.pptx VIP
- 《新生儿高胆红素血症诊治指南(2025)》解读(1)PPT课件.pptx VIP
- SGT756国电南自保护培训全解.ppt VIP
- 建设工程工程量清单计价办法(市政工程定额章节说明).pdf VIP
- 盘扣模板支撑体系技术交底(二级).docx VIP
- 精创温控器EK-3010说明书用户手册.pdf
- 外墙涂料施工安全技术交底.doc VIP
- 在线网课学习课堂《舰艇操纵与避碰》单元测试考核答案.docx VIP
文档评论(0)