柔性数组

柔性数组的大小是未知的,数组大小是可以调整的。结构体中最后一个元素允许是未知大小的数组。

#inclide <stdio.h>
#include <string.h>
#include <errno.h>

typedef struct S
{
  int n;
  int arr[];//柔性数组成员
  //int arr[0];//柔性数组成员
}S;
int main()
{
	S *p = NULL;
  p = malloc(sizeof(S)+10*sizeof(int));
  p->n=10;
  for(int i=0;i<10;i++)
  {
    p->arr[i]=i;
  }
  for(int i=0;i<10;i++)
  {
    printf("%d ",p->arr[i]);
  }
  free(p);
  p=NULL;
}

柔性数组特点

  • 结构体的柔性数组成员前面必须至少一个其他成员。
  • sizeof返回这种结构体大小不包括柔性数组的内存。
  • 包含柔性数组的结构用malloc函数进行动态内存分配。
  • 方便内存释放。
  • 访问速度有所提升,连续空间减少内存碎片。