免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: lovehahaforever
打印 上一主题 下一主题

[C] 关于结构体问题,通过首地址偏移来访问到成员变量 [复制链接]

论坛徽章:
0
41 [报告]
发表于 2012-12-18 12:19 |只看该作者
回复 40# cokeboL

不好意思,是LZ本人水平较浅,不知道需要通过*(char **)..才能访问到char *display,




   

论坛徽章:
0
42 [报告]
发表于 2012-12-18 12:20 |只看该作者
回复 40# cokeboL
不用问其他人了,就两个字可以说明二楼的答非所问

楼主问的是如何访问,二楼给出的是display的偏移,如果知道偏移就知道如何访问,那么楼主就不会在这发帖了。


   

论坛徽章:
0
43 [报告]
发表于 2012-12-18 12:34 |只看该作者
回复 40# cokeboL

lz确实没有说不涉及display就要访问它,但从lz的上下文就可以推断出,他显然是对数据结构的布局有所假设,通过固定的偏移去访问也是为了多个数据结构可以统一处理,后面的回帖也印证了这一点。至于这是不是一个好的设计,存不存在很多缺陷,这是另外一个问题了。

   

论坛徽章:
0
44 [报告]
发表于 2012-12-18 12:42 |只看该作者
本帖最后由 sqfasd 于 2012-12-18 12:44 编辑

接着讨论lz的主题吧
可以不可考虑这样的数据结构
  1. struct Property{
  2.         char *key;
  3.         union{
  4.             int iv;
  5.             float fv;
  6.             char *pv;
  7.         };
  8.     };
  9.     struct Property1{
  10.         int type;
  11.         char *key;
  12.         char *value;
  13.     };

  14.     struct XmlElem{
  15.         int type;
  16.         int len;
  17.         struct Property *properties;
  18.     };
复制代码

论坛徽章:
0
45 [报告]
发表于 2012-12-18 13:03 |只看该作者
回复 44# sqfasd

这个结构只是个简化版本
你后面要考虑的就是怎么通过key查找value,简单的就是通过线性遍历,复杂点但是效率高的就是通过查找树、哈希表
如果是用c++的话就简单了,

   

论坛徽章:
0
46 [报告]
发表于 2012-12-18 13:45 |只看该作者
回复 45# sqfasd

能不能把
  1. typedef struct _video{

  2.         char *ch;
  3.         char *rate;
  4.         char *frame;
  5.         char *display;
  6. }video;
复制代码
填到你的结构体里面,我再来理解一下。



   

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
47 [报告]
发表于 2012-12-18 20:12 |只看该作者
sqfasd 发表于 2012-12-17 17:27
就是二级指针吧。
把char*当作int一样的数据类型就行了
更严谨的答案,请高手回答

64位系统要当成long。

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
48 [报告]
发表于 2012-12-18 20:14 |只看该作者
本帖最后由 yulihua49 于 2012-12-18 20:43 编辑
lovehahaforever 发表于 2012-12-17 16:30
typedef struct __video{

        int ch;

看看这个吧:
http://space.itpub.net/8804348/viewspace-478471#xspace-itemreply
那里边的意思是用一个模板来描述结构,T_PkgType,里边的offset就是该成员的偏移量。
偏移量是计算出来的,那帖子里有算法。使用时,首地址+偏移量找到成员的地址,再根据类型进行处理。
例子里get_one()从结构里序列化出一个成员,put_one()反序列化一个成员。其它功能自己举一反三。
写模板挺麻烦的,可以利用数据库,每种结构对应数据库一个表,利用数据字典自动生成结构和模板。
现在我们就是这么用的。

论坛徽章:
1
金牛座
日期:2014-01-05 19:12:11
49 [报告]
发表于 2012-12-19 08:10 来自手机 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
1
金牛座
日期:2014-01-05 19:12:11
50 [报告]
发表于 2012-12-19 08:10 来自手机 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP