C语言:柔性数组

一、概念

也许比较陌生,没有听说过,但是柔性数组是真实存在的。在c99中,首先,柔性数组是结构体成员,结构中的最后一个元素允许是未知大小的数组,其次,它前面至少有一个结构体成员,这就叫做柔性数组。

例如:

typedef struct st_type

{

int i;

int a\[\];

};

二、柔性数组的特点

2.1.结构中的柔性数组成员前面至少有一个结构体成员
2.2.sizeof返回的这种结构大小不包括柔性数组的内存
2.3.包含柔性数组成员的结构用malloc()函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小

三、柔性数组的使用

代码如下(可自行测试):

typedef struct

{

int i;

int a\[\];

}type_a;

#include<stdio.h>

#include<stdlib.h>

int main() {

int i = 0;

type_a* p = (type_a*)malloc(sizeof(type_a) + 100 * sizeof(int));

p->i = 100;

for (i = 0; i < 100; i++) {

p->ai = i;

}

free(p);

return 0;

}

四、柔性数组的优势

4.1. 内存连续,访问更快(性能优势)
4.2. 只需一次分配和释放(管理优势)
4.3.节省内存空间(空间优势)
相关推荐
星轨初途13 天前
【C++进阶】vector 类从入门到精通:核心接口与内存机制实战指南
c语言·开发语言·c++·经验分享·笔记·柔性数组
qq_2965532716 天前
[特殊字符] 旋转排序数组中的高效搜索:从线性到二分查找的进阶之路
数据结构·算法·搜索引擎·分类·柔性数组
图码16 天前
[特殊字符] 高效统计排序数组中目标元素的出现次数
数据结构·算法·排序算法·柔性数组·图搜索
图码17 天前
二分查找进阶:如何在有序数组中快速找到Upper Bound?
数据结构·算法·面试·分类·柔性数组
qq_2965532721 天前
[特殊字符] 搜索插入位置:从O(n)到O(log n)的优雅进化
数据结构·算法·面试·分类·柔性数组
LuminousCPP1 个月前
C 语言动态内存管理全解析:从基础函数到柔性数组与内存分区
c语言·经验分享·笔记·学习·柔性数组
凉茶钱1 个月前
【c语言】动态内存管理:malloc,calloc,realloc,柔性数组
c语言·c++·vscode·柔性数组
图码1 个月前
最大子数组和问题:从暴力到Kadane算法的优雅蜕变
数据结构·算法·动态规划·柔性数组
qq_296553271 个月前
[特殊字符] 数组中的递增三元组:O(n) 时间高效查找,面试必考!
数据结构·算法·面试·职场和发展·组合模式·柔性数组
qq_296553271 个月前
【LeetCode】最大子数组乘积:三种解法从暴力到最优
数据结构·算法·leetcode·职场和发展·动态规划·柔性数组