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