以前确实没关注过这个问题,一直都是直接定义固定长度的数组,尽量减少指针的操作。
柔性数组主要是再结构体里面定义一个长度为0的数组,这里和定义一个指针式存在明显去别的。定义一个指针会占用内存,但是定义一个长度为0的数组不会占用空间。
以下具体的使用例程:
//结构体定义
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;
}
总体来说,柔性数组具有极大的灵活性,主要是用作底层接口实现,对外只需要使用一个指针实现不定长数组,减少代码的风险。