以前确实没关注过这个问题,一直都是直接定义固定长度的数组,尽量减少指针的操作。
柔性数组主要是再结构体里面定义一个长度为0的数组,这里和定义一个指针式存在明显去别的。定义一个指针会占用内存,但是定义一个长度为0的数组不会占用空间。
以下具体的使用例程:
objectivec
//结构体定义
strcut Test
{
int number;
char buf[0]; //柔性数组
};
int main(void)
{
struct Test* ptr = null; //创建指针
/*
动态分配大小,这里是柔性数组实现的关键部分
根据上面的描述,结构体实际上空间只有4个Byte
后续增加的空间,就是柔性数组的大小,实现不定长数组。
*/
ptr = (struct Test*)malloc(sizeof(struct Test) + 40);
ptr->number = 20;
if(ptr != null)
{
printf("分配成功\n");
for(int i = 0;i < ptr->number)
{
ptr->buf[i] = i;
printf("%d" ,ptr->buf[i]);
}
printf("测试完毕\n");
//释放
free(ptr);
//消除野指针
ptr = null;
}
else
{
printf("分配失败\n");
}
return 0;
}
总体来说,柔性数组具有极大的灵活性,主要是用作底层接口实现,对外只需要使用一个指针实现不定长数组,减少代码的风险。