关于柔性数组

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

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

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

相关推荐
㓗冽10 分钟前
60题之内难题分析
开发语言·c++·算法
大江东去浪淘尽千古风流人物12 分钟前
【VLN】VLN仿真与训练三要素 Dataset,Simulators,Benchmarks(2)
深度学习·算法·机器人·概率论·slam
铉铉这波能秀39 分钟前
LeetCode Hot100数据结构背景知识之字典(Dictionary)Python2026新版
数据结构·python·算法·leetcode·字典·dictionary
蜡笔小马1 小时前
10.Boost.Geometry R-tree 空间索引详解
开发语言·c++·算法·r-tree
唐梓航-求职中1 小时前
编程-技术-算法-leetcode-288. 单词的唯一缩写
算法·leetcode·c#
仟濹1 小时前
【算法打卡day3 | 2026-02-08 周日 | 算法: BFS】3_卡码网99_计数孤岛_BFS | 4_卡码网100_最大岛屿的面积DFS
算法·深度优先·宽度优先
Ll13045252981 小时前
Leetcode二叉树part4
算法·leetcode·职场和发展
颜酱1 小时前
二叉树遍历思维实战
javascript·后端·算法
宝贝儿好1 小时前
第二章: 图像处理基本操作
算法
小陈phd1 小时前
多模态大模型学习笔记(二)——机器学习十大经典算法:一张表看懂分类 / 回归 / 聚类 / 降维
学习·算法·机器学习