什么是柔性数组?
C99规定,在一个结构体类型中,最后一个成员类型名是未定大小的数组,则为柔性数组。
柔性数组的特点是什么?
其一,不占据sizeof()返回结构体类型的大小的内存,
其二,柔性数组前面至少包含一个元素,
其三,用malloc()动态开辟超出结构体类型大小的内存空间,以满足数组预期的的大小,
柔性数组的使用:
可以看出柔性数组基本和动态内存开辟空间近似。
所以上面的有些代码还可以改成,
两者区别就是,用柔性数组开辟的动态空间,在堆区上是连续的。而利用指针开辟的动态空间,与另外几个成员名,是不连续的。 就算结构体变量也在堆区上开辟,那由malloc的脾气,在堆区任意开辟一片足够的空间,你用malloc开辟两次空间,那肯定不连续。
那柔性数组的优势是什么?
1.方便空间的释放,释放空间只需free一次
2.空间利用率高,开辟空间只需开辟一次