柔性数组(flexible array)主要用于在结构体中实现变长结构体。它允许结构体末尾挂一段长度可变的数据区,而不必在定义时就指定大小。
示例代码
typedef struct
{
int x;
char data[]; //或 char data[0]并不占用内存
}s;
int main(int argc, char *argv[])
{
s*p = static_cast<s*>(malloc(100));
strcpy(p->data,"qwqrqqrrqq");
cout << p->data ;
free(p);
system("pause");
return 0;
}
要点说明
data紧跟在结构体末尾,本身并不占用内存。- 当分配出来的内存大于
sizeof(int)时,data指向的正是多出来那部分内存的首地址。 - 正是利用这一特性,可以通过一次
malloc为结构体及其后续的可变长数据区分配连续内存,从而实现变长结构体。