一、什么是柔性数组
柔性数组是在结构体定义中最后一个成员,是一个元素数量不确定的数组,是在C99标准中结构体中使用的。
二、编写方式
在结构体SS中,data就是一个柔性数组。
struct SS{
int x;
int y;
int data[];//这是一个柔性数组
};
struct SS{
int x;
int y;
int data[0];//这也是一个柔性数组,效果和上边一样
};
三、使用规则
柔性数组可以根据实际需要时进行动态申请,它本身是不计入结构体大小的计算的。
比如结构体SS的大小就是8字节。
柔性数组的使用必须是结构体的最后一个变量,并且前边至少还有一个别的变量。
下边举一个例子:
#include <iostream>
#include <cstdlib>
using namespace std;
struct SS{
int x;
int y;
int data[0];//这是一个柔性数组
};
int main() {
// 答案是8,说明柔性数组不占结构体大小
cout << "sizeof(SS) = " << sizeof(SS) << endl;
//将data变成了一个动态申请的100个int元素的数组
SS *ss = (SS *)malloc(sizeof(SS) + sizeof(100));
return 0;
}
四、柔性数组的优势
| 方便动态申请与释放 |
仅用一次malloc就可以完成结构体变量与内部数组的动态申请。 如果将data改成int *类型也可以实现,但是malloc出结构体变量ss一次,malloc出data数组又一次,释放时也需要多一次 |
| 空间连续 | 柔性数组申请的空间首地址紧接着结构体的上边变量,可以更好地保证空间的连续性,从而缓解内存碎片的问题 |
本文介绍了C99中柔性数组的概念、编写方式,强调了其作为结构体最后一个成员且不计入大小的特点。并讨论了柔性数组在动态申请、空间连续性和内存碎片管理上的优势。


577

被折叠的 条评论
为什么被折叠?



