天天看点

柔性数组

柔性数组:数组大小待定的数组。

作用:为了满足变长的结构体。

介绍:柔性数组不能直接在C/C++中单独使用,而是作为结构体最后一个成员,而且该结构体除此之外还应该至少有一个成员。柔性数组不占结构体的内存大小,只是一个标识占位符。具体用法,见如下代码:

struct Buffer
{
    int len;
    char a[0];//该数组就是柔性数组,不占用结构体Buffer的大小
}Buffer;
           

此时,sizeof(Buffer)的值为4(32位系统),len一般用来指示数组a的字节大小,此结构体常用于发送和接收使用,然而我们可以通过柔性数组改变结构体的大小,如下:

Buffer *p=(Buffer *)malloc(sizeof(Buffer)+100*sizeof(char));//其中char是柔性数组的类型,柔性数组也可以为其他类型,100<span style="white-space:pre">							</span>    //可以根据需要设置
           
p->len=100;//常用作包头,提示发送的有效数据总共是100个字节
           
for(int i=0;i<p->len;++i)
           
<span style="white-space:pre">	</span>a[i]='a';//根据需要对char数组a赋值
           
}
           
//free p;//最后记得释放,否则会造成内存泄露
           

此时p->a即指向了新扩充大小后的数组a[100]的首地址,就可以对数组a[100]进行操作了。

继续阅读