关于柔性数组

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

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

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

相关推荐
north_eagle4 小时前
向量搜索技术深度研究报告:架构原理、核心算法与企业级应用范式
算法·架构
椰萝Yerosius4 小时前
[题解]2024CCPC郑州站——Z-order Curve
c++·算法
小曹要微笑4 小时前
STM32F7 时钟树简讲(快速入门)
c语言·stm32·单片机·嵌入式硬件·算法
南山安5 小时前
栈(Stack):从“弹夹”到算法面试题的进阶之路
javascript·算法·面试
2301_764441336 小时前
Python构建输入法应用
开发语言·python·算法
AI科技星6 小时前
为什么变化的电磁场才产生引力场?—— 统一场论揭示的时空动力学本质
数据结构·人工智能·经验分享·算法·计算机视觉
TheLegendMe7 小时前
贪心+线程安全单例
算法·哈希算法
豐儀麟阁贵7 小时前
8.5在方法中抛出异常
java·开发语言·前端·算法
胖咕噜的稞达鸭7 小时前
算法入门:滑动窗口--->找到字符串中所有的字母异位词,串联所有的子串,最小覆盖子串
数据库·redis·算法
小青龙emmm8 小时前
2025级C语言第二次周测(国教专用)题解
c语言·开发语言·算法