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->a[i] = i;

}

free(p);

return 0;

}

四、柔性数组的优势

4.1. 内存连续,访问更快(性能优势)
4.2. 只需一次分配和释放(管理优势)
4.3.节省内存空间(空间优势)
相关推荐
我能坚持多久1 个月前
D19—C语言动态内存管理全解:从malloc到柔性数组
c语言·开发语言·柔性数组
我是大咖2 个月前
关于柔性数组的理解
数据结构·算法·柔性数组
Allen_LVyingbo2 个月前
面向“病历生成 + CDI/ICD”多智能体系统的选型策略与落地实践(三)
算法·自然语言处理·性能优化·知识图谱·健康医疗·柔性数组
栈与堆2 个月前
数据结构篇(1) - 5000字细嗦什么是数组!!!
java·开发语言·数据结构·python·算法·leetcode·柔性数组
yuanmenghao2 个月前
自动驾驶中间件iceoryx - 内存与 Chunk 管理(一)
c++·vscode·算法·链表·中间件·自动驾驶·柔性数组
山上三树2 个月前
柔性数组(C语言)
c语言·开发语言·柔性数组
黎雁·泠崖2 个月前
C 语言动态内存管理高阶:柔性数组特性 + 程序内存区域划分全解
c语言·开发语言·柔性数组
A***27954 个月前
ReactGraphQL案例
spring boot·spring cloud·柔性数组
番茄大杀手5 个月前
C/C++柔性数组
c语言·柔性数组