结构体和指针分享.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文档。上传文档
查看更多
一、 结构体 结构体声明:结构体声明包含结构体关键字、类型名和数据成员 例: struct student { char name; char addr; char age; float height; int weight; char grade[7]; } ; 结构体变量 :定义包含直接声明时定义、单独定义 例: struct student { char name; char addr; char age; float height; int weight; char grade[7]; }Xiaonei ;//直接定义一个结构体变量时可以省略结构体类型名 struct student Xiaonei ; 此外还可以利用宏定义来声明一个结构体变量 例: typedef struct student { char name; char addr; char age; float height; int weight; char grade[7]; }STRUCTSTUDENT ; 结构体变量所占内存空间大小,可以参考其他相关文档。 成员的内存分配规律是这样的: 从结构体的首地址开始向后依次为每个成员 寻找第一个满足条件的首地址 x,该条件是 x % N = 0 , 并且整个结构的长度必 须为各个成员所使用的对齐参数中最大的那个值的最小整数倍 ,不够就补空字 节 。 结构体中所有成员的对齐参数 N 的最大值称为 结构体的对齐参数 。 对齐规则 每个特定平台上的编译器都有自己的默认 “对齐系数 ”(也叫对齐模数 ) 。程序员可 以通过预编译命令 #pragma pack(n) ,n=1,2,4,8,16 来改变这一系数,其中 的 n 就是你要指定的 “对齐系数 ”。 对齐步骤: 1 、数据成员对齐规则: 结构 (struct)( 或联合 (union)) 的数据成员, 第一个数据 成员放在 offset 为 0 的地方,以后每个数据成员的对齐 按照 #pragma pack 指定的数值和这个数据成员自身长度中,比较小的那个进行。 2 、结构 ( 或联合 ) 的整体对齐规则: 在数据成员完成各自对齐之后, 结构 ( 或联合 ) 本身也要进行对齐,对齐将 按照 #pragma pack 指定的数值和结构 ( 或联合 ) 最 大数据成员长度中,比较小的那个进行。 3 、结合 1 、2 颗推断:当 #pragma pack 的 n 值等于或超过所有数据成员长 度的时候,这个 n 值的大小将不产生任何效果。 备注:数组成员按长度按数组类型长度计算,如 char t[9], 在第 1 步中数据自 身长度按 1 算,累加结构体时长度为 9; 第 2 步中,找最大数据长度时,如果结 构体 T 有复杂类型成员 A 的,该 A 成员的长度为该复杂类型成员 A 的最大成员 长度。 其实字节对齐的细节和具体编译器实现相关, 但一般而言,满足三个准则: 1) 结构体变量的首地址能够被其最宽基本类型成员的大小所整除; 2) 结构体 每个成员相对于结构体首地址的偏

文档评论(0)

肖四妹学教育 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档