当前位置: 首页 > news >正文

关于柔性数组

以前确实没关注过这个问题,一直都是直接定义固定长度的数组,尽量减少指针的操作。

 柔性数组主要是再结构体里面定义一个长度为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;
}

总体来说,柔性数组具有极大的灵活性,主要是用作底层接口实现,对外只需要使用一个指针实现不定长数组,减少代码的风险。

相关文章:

  • 开源项目faster-whisper和whisper是啥关系
  • C语言之continue相关题目
  • 剖析 Rust 与 C++:性能、安全及实践对比
  • 【频域分析】对数谱
  • app逆向专题四:charles抓包工具配置
  • Relief法**是一种非常经典、有效的**特征选择算法
  • Java—— 文字版格斗游戏
  • 整型与布尔型的转换
  • 二分三分算法详解, 模板与临界条件分析
  • Android开发:应用DeepSeek官方Api在App中实现对话功能
  • 智能制造方案精读:117页MES制造执行系统解决方案【附全文阅读】
  • vue webSocket
  • 腾势品牌欧洲市场冲锋,科技豪华席卷米兰
  • CSI-PVController-claimWorker
  • 【Unity精品源码】Ultimate Character Controller:高级角色控制器完整解决方案
  • Go语言Slice切片底层
  • 51c大模型~合集65
  • 【开发记录】服务外包大赛记录
  • CF985G Team Players
  • 即梦+剪映:三国演义变中国好声音制作详解!
  • 科技部等七部门:优先支持取得关键核心技术突破的科技型企业上市融资
  • 日本前卫艺术先驱群展上海:当具体派相遇古树古宅
  • 重庆市委原常委、政法委原书记陆克华被决定逮捕
  • 媒体:“西北大学副校长范代娣成陕西首富”系乌龙,但她的人生如同开挂
  • 加拿大新政府宣誓就职
  • 通化市委书记孙简升任吉林省副省长