下班写文章难免会有些出错,也感谢那些在后台留言指出错误的读者;表驱那篇推文存在数组越界问题,可以通过预先开辟一个大数组的方式解决,但这样解决方式会存在资源浪费问题,如果想不浪费资源来解决数组溢出的问题,那就来看看柔性数组怎么样!
| 简单介绍
c99中,结构体中的最后一个元素允许是未知大小的数组,这就叫作 柔性数组 。 柔性数组的特点:
结构体中柔性数组成员前面必须至少有一个其他成员。
sizeof返回的这种结构大小不包括柔性数组的内存。
包含柔性数组成员的结构用malloc()函数进行内存的动态分配。
#include typedef struct { int length; int arr[];}data_t; int main(){ data_t data1; printf(sizeof:%d,sizeof(data1)); return 0; }
注意:在dev cpp中,屏蔽了第五行并不会报错!
| 简单使用
#include#includetypedef struct { int length; int arr[];}data_t; int main(){ //为结构体及其柔性数组成员申请一块连续的空间 data_t *p=(data_t*)malloc(sizeof(data_t)+10*sizeof(int)); if(null==p) { printf(malloc error); return 0; } p->length=10; for(int i=0;ilength;i++) { p->arr[i]=i;//赋值 printf(%d ,p->arr[i]); } printf(); //重新调整所申请的空间,将柔性数组调整为40 p=(data_t*)realloc(p,sizeof(int)+40); if(null==p) { printf(malloc error); return 0; } p->length=40; for(int i=0;ilength;i++) { p->arr[i]=i;//赋值 printf(%d ,p->arr[i]); } printf(); //释放内存 free(p); p=null; return 0; }
| 优势总结
柔性数组的特点在于只需要用一次malloc创建就可以,而且和结构体是在同一块连续的空间,对比在结构体中放指针成员而言,可以减少内存碎片化,因为malloc申请的内存位置是任意的;柔性数组申请的内存更加集中,有利于查找使用;柔性数组只用开辟一次,有利于提高访问速度;用malloc函数进行动态内存申请时,柔性数组的大小应该大于结构体的大小以便于柔性数组适应预期大小。 --end--
Gartner预估半导体行业成长减个位数
人工智能+医疗是做优质医疗资源的增量工作
中国飞机产业的发展现状与趋势分析
中国移动执行副总裁李正茂表示O-RAN联盟正在推动无线接入网的创新
虹桥商务区准备布下数万个物联传感器
C语言柔性数组详解
Intel傲腾存储终极形态DIMM内存明年到来 暂时不会彻底淘汰DDR4
新能源汽车电机气密性测试解决方案
Mobile、诺基亚上演专利诉讼“三国杀”
扫地机器人将在智能家居中扮演重要角色
亚马逊人脸识别服务遭抗议 中德宏泰发布 AI mini box
区块链的信任到底来自于哪里
i9-9900K怎样超频
氧指数测定仪的常见问题以及相关处理方法的介绍
OLED显示器技术及功能:电源供应是否会影响显示器画质
荷塘创投领投,申矽凌完成数千万B轮融资
中国移动上半年营运收入达到人民币3,899亿元,同比增长0.1%
怎样划分程序员的技术层级
基于STM32的智能饮水机系统设计
2014 MWC 看华为如何与行业共同探讨移动改变世界