c知识点总结结构体指针使用.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
位操作:熟悉 | ^ 操作。应聘嵌入式C 开发的岗位会考这方面的知识。见实验5 。 结构体 共用体 如前面讲的,作为函数参数和返回值,结构体是值传递。结构体变量之间可以直接赋值, 结构体在初始化时才能整体赋值。 C99 里新的结构体初始化方法。初始化结构体的指定成员变量。见《C primer plus》P382 struct book{char a; int b; double c }; struct book surprise ={ .b=3 }; 即初始化指定的 成员变量b,其他成员变量的值赋值为0 。在内核驱动代码中会经常见到。 指向结构体的指针及使用 struct node { int data; struct node *next; } node1; struct node *point=node1; 内存模型 高地址 next dat [ point ] node1 此时,point 指向node1。即*point 和node1 对应的是同一块内存。 (*point).dat 等价于node1.dat 对应的是同一块内存。 (*point).next 等价于node1.next 对应的是同一块内存。即黄色背景的内存。 point-next 为什么这段代码行得通: int offset= ( ( (struct book*) 0 )-b); //获得成员变量b 在结构体的偏移量。 等价于:struct book *ptr=NULL; int offset= ( ptr-b) ; // (*ptr).b ; 编译器维护关于每个结构类型的信息,指示每个字段的字节偏移。它以这些偏移作为存 储器引用指令中的移位,从而产生对结构元素的引用的代码。结构体的各个字段的选取完全 是在编译时处理的。参考《深入理解》P166 页中的一个例子。 程序对内存的访问,都是先生成该内存的地址,再访问该内存。 结构体对齐,及填充 结构体的对齐与填充 C 语言标准未严格规定该如何对齐,不同系统的对齐策略略有不同。 参考《深入理解》P170 数据对齐。 linux 策略:linux/IA32 (Intel Architecture 32)下,基本类型按其占用字 节大小对齐。(即该类型变量的首地址能被sizeof (类型)整除,基本类型是指泛 整形和浮点类型)。 结构体按其最大成员变量的对齐规则对齐。若结构体按 n 个字节对齐,那 么结构体的大小也要能被n整除。 结构体内的成员按上图的方式对齐。 struct S{ int a; char b; }; 该结构体按其最大成员int 的对齐规则对齐。 结构体struct S 按4 个字节对齐,即它的首地址和大小必须都能被4 整除。 因为有对齐的要求就出现了内存填充(空着若干个字节,不使用)。 A c j d 结构总大小 结构体对齐要求 0 4 8 12 16 4 B c d j 结构总大小 结构体对齐要求 0 4 5 8 12 4 C w c 结构总大小 结构体对齐要求 0 6 10 2 D w c 结构总大小 结构体对齐要求 0 8 20 4 E a p

文档评论(0)

xieliandimei + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档