什么是柔性数组
柔性数组是一种动态可变的数组,也许你从来没有听说过这个概念,但是它确实是存在的,是在C99标准底下支持的一种语法。想要使用柔性数组需要满足3个条件:
柔性数组只能存在于结构体内,且必须是结构体最后一个成员 柔性数组成员前,至少存在一个其他成员
数组的大小未定义
typedef struct st_type
{
int i;
int a[0];//柔性数组成员
}type_a;
typedef struct st_type
{
int i;
int a[];//柔性数组成员
}type_a;
这两个都是柔性数组
柔性数组有什么用
结构体中的数组并没有占用内存,这就是从0开始,却可以拓展的柔性数组这一不占用内存的特性,可以构造出内存缓冲区,同时由于是使用多少就申请多少,也起到了减少内存碎片化的作用,柔性数组并不是标识结构体结束,而是作为结构体的一种拓展。
同时也可以理解为柔性数组为结构体的一个偏移地址,这使得结构体的大小可以进行动态的变化。
像下面这样的与柔性数组有什么区别
typedef struct{
int stuID;
int age;
char *pAddress;
}ST_STU_INFO;
首先柔性数组不占用内存,而指针则不然,此外柔性数组在使用上是直接访问,形式上更加直观,而指针需要经过声明再进行动态分配内存,在效率上和柔性数组相比也稍微低一些,