首页  >   经验  >   C结构体-实用技巧

C结构体-实用技巧

查看 ooklasd 的博客 2015-06-29 23:29:20 1645
结构体  
手机阅读 | 转发赚积分
手机收藏 | 分享给好友
简介难度 3/5 技巧3/5 -适合实际工程使用

C结构体——技巧

难度 3/5 技巧3/5 -适合实际工程使用

C结构体技巧有以下那么几种(需要补充的联系我)

1、结构体成员偏移计算(我目前,没怎么用)

2、结构体数组指针(初学经常会想不通)

3、结构体的文件写入与读取(常用技巧)

4、可变长结构体(高级技巧)

 

一、结构体成员偏移计算

无意中看到一个问题,怎么快速计算结构体成员的偏移量?

那时候我想了一想,声明一个结构体,然后取地址相减不就可以得到结果了么?

当然,我们是可以这样子做的。但是这样是不是最好的做法呢?显然还有一种写法可以更加简便就可以获取偏移量了。

//声明

Typedef struct name

{

Char a;

Int b;

Char c;

}

Sstruct;

 

//运算

int offset = (int)&(((Sstruct*)0)->b);

首先我们(Sstruct*)(0) 使用0号地址为基地址,->b获得b这个变量,这时候((Sstruct*)0)->b获得的是成员 int b。然后我们取成员int b的地址: &()获得b的指针,这个指针式相对于0基地址的。所以把这个指针再次转化为整型(int) 便可以得到偏移量。

这时候我们应该要想一下,这个offset的值在32位系统里面应该是多少?64位呢?这个数值又和什么相关?请编程思考,答案在下面。

32位系统 offset = 4;

二、结构体数组指针

有时候我们想结构体里面有一些数组指针来代表可变长的变量

Struct   data{ 

Char * data_ptr

Char data_arr[];

}

我们通常会用到这两种方式去表达一些可变长数据

即使这两个指针都可以当作数组用,但是区别还是很大的。

我们要计算结构体大小来赋值对应的内存,auto size = sizeof(data); 这样指针方式和数组方式得到的值就很可能不同,指针永远得到的是4,数组得到的是数组长度(某些情况内存对齐,值就更加大了)。这样的差异,很难让我们检查出来。类似于这种的mencpy(....),看上去是没有问题的。但是如果是指针形式,你就只是copy了一个指针,指针说指向的内存却没有被复制。如果是数组形式,你得到的是一个完整的copy。这就是书上所说的:浅复制、深复制(浅copy,深copy)。

三、结构体的文件写入与读取

结构体用于文件读写,实在是太方便了,我们无需写什么特殊语句来获取某个值,而是直接用二进制文件读写,就可以识别他们所在的位置。例如,我想把一个的播放列表,保存在一个文件中:

1.微信扫码
2.点击按钮,粘贴命令
自动刷新 手动刷新
命令:rd 9L:,h 复制
提示:如果您发送了命令,自动刷新会展开全文。自动刷新最多60秒,超过60秒请点击手动刷新。
创作不易,汗水不止!为防止劳动果实被爬虫窃取,开启了反爬机制,需要您发送命令继续阅读。取关会再次出现此提示。一段时间后出现此提示,请再次发送即可。如有问题,请加客服微信Freeme007处理。感谢您的理解。
标注
评论
站内搜
百度搜
传送到手机
手机扫码,识别文字,完成传送x
加载中...
标注内容x
加载中...
添加标注x
文章标题:C结构体-实用技巧
文章地址:http://www.cjjjs.com/article/6292015202923221
转载到个人博客,请在文末带上右侧内容(含超链接):本文转载自:C结构体-实用技巧
收藏 0 点赞 0
公众号
微信赞赏
支付宝赞赏
领支付宝大红包
QQ群

相关阅读

  1. C++ Primer Plus 6th 4.13 编程练习题 第6题 结构体数组的初始化和使用 查找全网同类文章
  2. C++ Primer Plus 6th 4.13 编程练习题 第5题 结构体的声明、初始化和使用 查找全网同类文章
  3. C++ Primer Plus 6th 4.12 复习题 第15题 动态创建结构体变量 查找全网同类文章
  4. C++ Primer Plus 6th 4.12 复习题 第9题 结构体变量的声明并初始化 查找全网同类文章
  5. C++ Primer Plus 6th 4.12 复习题 第8题 结构体类型声明 查找全网同类文章
  6. 循环遍历结构体的实现方法和代码实现 查找全网同类文章
  7. 结构体封装的STL string,通过new新建对象后通过delete释放报错 查找全网同类文章
  8. C语言基础教程:6 复合类型引入--数组和结构体 查找全网同类文章
  9. C结构体-实用技巧 查找全网同类文章
  10. C的结构体——知识掌握要点 查找全网同类文章
分享到:
分享文章[C结构体-实用技巧]到QQ空间

相关阅读

猜您感兴趣