PC6下载站

分类分类

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

关注+2011-05-25作者:不详

 
C语言2.0153KB7.7
下载

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)。

展开全部

相关文章

更多+相同厂商

热门推荐

  • 最新排行
  • 最热排行
  • 评分最高
排行榜

    点击查看更多

      点击查看更多

        点击查看更多

        说两句网友评论

          我要评论...
          取消