网站大量收购独家精品文档,联系QQ:2885784924

C语言进阶-第五讲 数据结构与链表.pdf

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C语言进阶-第五讲 数据结构与链表

第 五讲 第 五讲 数据结构与链表 数据结构与链表 凌 明 trio@ 东南大学国家专用集成电路系统工程技术研究中心 目录 结构,联合,枚举 用结构构成链表 单向链表 双向链表 循环双向链表 窗口系统的数据结构与代码分析 窗口系统的代码调试 1 结构体 结构是由若干(可不同类型的)数据项组合而成的复合数据对象,这些数据 项称为结构的成分或成员。 (1) 字段 C 语言的结构还提供了一种定义字段的机制,使人在需要时能把几个结构成 员压缩到一个基本数据类型成员里存放,这可以看作是一种数据压缩表示方 式。 例16: struct pack { unsigned a:2; unsigned b:8; unsigned c:6; } pk1, pk2; 结构变量pk1或者pk2的三个成员将总共占用16位存储,其中a占用2 位,b 占 用8 位,c占用6 位。 (2)结构体内部的成员的对齐 在计算结构体长度(尤其是用sizeof)时,需要注意! 根据不同的编译器和处理器,结构体内部的成员有不同的对齐方式,这 会引起结构体长度的不确定性。 例17: #include stdio.h struct a{ char a1; char a2; char a3; }A; struct b{ short a2; char a1; }B; void main(void) { printf(“%d,%d,%d,%d”, sizeof(char), sizeof(short), sizeof(A), sizeof(B)); } 在Turbo C 2.0中结果都是 1,2,3,3 在VC6.0中是 1,2,3,4 字节对齐的细节和编译器实现相关,但一般而言,满足三个准则: 1) 结构体变量的首地址能够被其最宽基本类型成员的大小所整除; 2) 结构体每个成员相对于结构首地址的偏移量(offset )都是成员大小的整数 倍, 如有需要编译器会在成员之间加上填充字节(internal adding ); 3) 结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会 在最末一个成员之后加上填充字节(trailing padding )。 对于上面的准则,有几点需要说明: 1)结构体某个成员相对于结构体首地址的偏移量可以通过宏offsetof()来获得,这 个宏也在stddef.h 中定义,如下: #define offsetof(s,m) (size_t)(((s *)0)-m) #define offsetof

文档评论(0)

xxj1658888 + 关注
实名认证
内容提供者

教师资格证持证人

该用户很懒,什么也没介绍

领域认证该用户于2024年04月12日上传了教师资格证

1亿VIP精品文档

相关文档