- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C知识点总结结构体指针使用
位操作:熟悉 | ^ 操作。应聘嵌入式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 data 高地址
[ point ] ----- node1
此时,point指向node1。即*point和node1对应的是同一块内存。
(*point).data等价于node1.data对应的是同一块内存。
(*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
i c j d 结构总大小 结构体对齐要求 0 4 8 12 16 4 B
i 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 32 36 4 3.42
a b c d e f g h 结构总大小 结构体对齐要求 0 4 8 16 20 24 28 36 40 4
如何尽量避免填充带来的分析影响:结构体定义按成员对齐规则从大到小书写,这样填充只会在尾部填充。当然,逻辑关系的考虑也很重要。
位域:整形类型(一般用unsigned int)
不能对结构体里的位字段取地址。
判断一个char ch=0x12字节内位序
共用体:首地址对齐。
判断系统是否为大端
指向函数的指针及库函数的使用:exit atexit
《C语言495个问题》1.36 4.12
枚举类型的使用:对一类宏的整体定义。
struct week{Sunday, };
使用库函数进行文件操作:缓冲区设置函数,文件操作库函数的使用。
学习对这些函数的使用时,请同学们参考《apue》第五章,这里会告诉大家函数的优点、缺点。比谭浩强的书描述要准确。
文件流:是全缓冲的。可以使用fseek进行位置移动。
标准输入输出流:是行缓冲的。不可以使用fseek等移动读写位置
标准错误输出流:是不缓冲的。不可以使用fseek等
您可能关注的文档
- 6中国移动网络设备维护手册-TD基站-华为(2011-V1).doc
- 6移频直放站用户手册.doc
- 6第六章包气带水.doc
- 7.3功率说课稿.doc
- 7.1.1有序数对教案设计.doc
- 7AU6题目及答案.doc
- 7一次函数导学案.doc
- 7无线网状网与3G比较.doc
- 7月8日更新2013年临床执业医师技能考试题真题汇总.doc
- 8.3测量小灯泡的电功率实验报告.doc
- 2025年江西省时事政治考试试卷带解析必背(有一套).docx
- 2025年河南省公务员考试时事政治考试试卷带解析附完整答案【全优】.docx
- 2025年河南省公务员考试时事政治考试试卷带解析及完整答案【各地真题】.docx
- 2025年辽宁省公务员考试时事政治考试试卷带解析附完整答案【夺冠】.docx
- 2025年河南省时事政治考试试卷带解析含答案【预热题】.docx
- 江西昌河航空工业有限公司校园招聘模拟试题附带答案详解及参考答案1套.docx
- 2025年江西省时事政治考试试卷带解析必背(综合题).docx
- 2024年案件风险防控学习心得体会范例(4篇) .pdf
- 2025年江西省时事政治考试试卷带解析(全国通用).docx
- 2024年竣工验收管理制度(三篇) .pdf
文档评论(0)