开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 16 天,点击查看活动详情。
前言
经过一段时间的学习,对C语言的基本知识点有了一定的了解并且有所掌握,接下来这段时间,将着重对C语言中那些拔高性的知识进行学习与练习,欢迎广大友友们前来交流,一起进步!!
一、结构体偏移量
-
可以利用
offsetof来计算结构体中属性的偏移 -
也可以通过地址的相加运算 计算偏移量
-
结构体嵌套结构体
二、内存对齐
-
内存对齐原因:以空间换时间
-
对于自定义数据类型对齐规则:
-
1、从第一个属性开始 偏移为0
-
2、第二个属性开始,地址要放在 该类型整数倍 与 对齐模数比 取小的值 的整数倍上
-
3、所有的属性都计算结束后,整体再做二次对齐,整体需要放在属性中最大类型 与 对齐模数比 取小的值的整数倍上
-
-
如果查看对齐模数
-
#pragma pack(show) -
默认对齐模数 是8,可以将对齐模数改为 2的n次方
-
-
当结构体嵌套结构体时候,只需要看子结构体中最大数据类型就可以了
内存对齐的好处
三、文件读写回顾
-
按照字符进行读写
-
写文件
fputc -
读文件
fgetc -
文件结尾
EOF END OF FILE
-
-
按行读写
-
写文件
fputs -
读文件
fgets
-
-
按块读写
-
写文件
fwrite
参数1 数据地址 参数2 块大小 参数3 块个数 参数4 文件指针 -
读文件
fread
-
-
按格式化读写
-
写文件
fprintf -
读文件
fscanf
-
-
随机位置读写
-
fseek (文件指针,偏移, 起始位置
SEEK_SET SEEK_END SEEK_CUR) -
rewind (文件指针) 将文件光标置首
-
error宏 全局变量
perror打印宏的提示错误信息
-
四、文件读写注意事项
-
当按照字符的方式读文件时候,通常利用判断EOF获取是否读到文件尾
-
当对自定义数据类型写入文件时,不要将指针写入到文件里,要将指针指向的内容写入
五、配置文件读写
-
需求:将文件中的有效内容截取出来,并且放入到一个键值对的数组中
struct ConfigInfo { char key[64] ; char value[64] }; -
获取有效行数
-
判断当前行是否有效
-
解析数据
parseFile- 将有效数据放入到数组中,数组在堆区开辟
-
根据
key获取valuegetInfoByKey -
释放内存
freeSpace
文件缓冲区解释图