关于变长结构体 的一些讨论

关于变长结构体 的一些讨论

2011/5/25 14:57:15来源:飓风整理作者:不详我要评论(0)
 
C语言2.0
授权:共享软件 大小:153KB 语言: 简体中文
下载地址 本周共下载 83 次

A:我是这样定义的,不知对不对
    typedef   struct   tagTest{
    int   uID;//标志
    int   iNum;//个数
    int   offset;//偏移量
    char   *str;//指针
    }TEST_S;
    uID是固定的,iNum个数是这样的,根据后面的,比如:
    我需要返回两对数据,则为2,但我不知如何把这两对数据存入这个结构体中,也有可能是3对数据,数据类型可以是int   .谢谢!
    B:我认识一个高人,很喜欢用这种结构,他颇有心得,我就在这里说一下
    type   struct   tagTest
    {
    int   uID;
    int   iNum;
    int   offset
    int   data[1];
    }   test;
    data是一个数据,个数为1,但是其实在使用的时候,不一定为1,也就是说在上述结构不能
    直接test   tt;这样声明,必要声明成指针,然后在malloc的时候,根据iNum数目进行申请,
    譬如iNum为5个int,这可以这样
    p   =   (test   *)malloc(sizeof(test)   +   (iNum   -   1)   *   sizeof(int));
    这样,后面的内容可以通过p-> data[i]访问了:)
    C:如果编译器够新,可以用VLA:
    type   struct   tagTest
    {
    int   uID;
    int   iNum;
    int   offset
    int   data[];
    }   test;
    使用时就不需要减一了:
    p   =   (test   *)malloc(sizeof(test)   +   iNum   *   sizeof(int));
    这里的data只是个占位符,sizeof(test)=3*sizeof(int)。

阅读本文后您有什么感想? 已有 人给出评价!

  • 0 囧
      囧
  • 0 恶心
      恶心
  • 0 期待
      期待
  • 0
      难过
  • 0 不错
      不错
  • 0 关注
      关注
  • 最新评论
  • 热门评论
共有评论(0)条 查看全部评论
高兴 可 汗 我不要 害羞 好 下下下 送花 屎 亲亲

注:您的评论需要经过审核才会显示出来