首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

0长度数组(柔性数组)的用法

2013-11-08 
零长度数组(柔性数组)的用法在前面的文章中的dnw源代码,使用了这样一个结构体:structptest{intadouble b

零长度数组(柔性数组)的用法

   在前面的文章中的dnw源代码,使用了这样一个结构体:

struct  ptest{     int  a;     double b;     char  *c;};

      指针成员c指向字符串。这种方法会造成字符串与结构体分离,malloc和free对内存管理产生碎片,也不利于操作。
如果我们把字符串和结构体连接在一起,字符串位置紧接着结构体,这样修改代码:
char  Str[] = "hello world";
struct ptest *Test = (struct ptest*)malloc(sizeof(struct ptest)+strlen(Str)+1);//+1是因为strlen不计算结束符
strcpy(Test+1,Str)


   (char*)(Test+1)就是字符串“hello  world”的地址了。c就成了多余的东西,可以去掉。然而,直接使用(char*)(Test+1)很不方便。于是,这种既能直接引用字符串,还不占用结构体空间,能灵活分配数据域大小的要求,柔性数组就能够满足。


   在这个结构体中,c是柔性数组成员,如果把Test指向的动态内存分配看作一个整体,c就是一个长度可以变化的柔性数组,c在结构体中长度为0,不占用Test的空间,Test->c就是“hello  world”的首地址。



热点排行