柔性数组:数组大小待定的数组。
作用:为了满足变长的结构体。
介绍:柔性数组不能直接在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]进行操作了。