柔性数组 :结构中允许最后一个成员是大小未知的数组
结构中的柔性数组前面必须至少一个其他成员,柔性数组成员允许结构中包含一个大小可变的数组。
sizeof返回的这种结构大小不包括柔性数组的内存。
包含柔数组成员的结构用malloc函数进行内存的动态分配,且分配的内存应该大于结构的大小以适应柔性数组的预期大小
例如:
struct stu
{
int i;
int a[0];//int a[];同样也可以,不过有点编译器可能会在前一种方法上报错
}stu1;
我们定义了一个可变长的结构体,利用sizeof 测得sizeof(stu)=sizeof(i)=sizeof(int)=4,最后定义的数组没有占用空间。
程序:
#include <iostream>
using namespace std;
struct MyData
{
int nLen;
char data[0];
};
int main()
{
int nLen = 10;
char str[10] = "123456789";
cout << "Size of MyData: " << sizeof(MyData) << endl;
MyData *myData = (MyData*)malloc(sizeof(MyData) + 10);
memcpy(myData->data, str, 10);
cout << "myData's Data is: " << myData->data << endl;
free(myData);
return 0;
}
输出如下
Size of MyData: 4
myData's Data is: 123456789
参考:http://blog.chinaunix.net/uid-27122224-id-3308027.html
点击打开链接
可以另参考:http://www.cppblog.com/Dream5/articles/148386.html 点击打开链接
http://coolshell.cn/articles/11377.html点击打开链接