柔性数组(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 为结构体及其后续的可变长数据区分配连续内存,从而实现变长结构体。