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.节省内存空间(空间优势)
相关推荐
LuminousCPP5 天前
C 语言动态内存管理全解析:从基础函数到柔性数组与内存分区
c语言·经验分享·笔记·学习·柔性数组
凉茶钱5 天前
【c语言】动态内存管理:malloc,calloc,realloc,柔性数组
c语言·c++·vscode·柔性数组
图码7 天前
最大子数组和问题:从暴力到Kadane算法的优雅蜕变
数据结构·算法·动态规划·柔性数组
qq_296553277 天前
[特殊字符] 数组中的递增三元组:O(n) 时间高效查找,面试必考!
数据结构·算法·面试·职场和发展·组合模式·柔性数组
qq_296553277 天前
【LeetCode】最大子数组乘积:三种解法从暴力到最优
数据结构·算法·leetcode·职场和发展·动态规划·柔性数组
枕星而眠24 天前
C 语言结构体硬核总结:内存对齐、#pragma pack、位段、柔性数组(面试+工程双指南)
c语言·后端·面试·柔性数组
lcj25111 个月前
动态内存管理:吃透 malloc/calloc/realloc/free,动态内存 + 柔性数组 + 经典错题一次懂
柔性数组
炘爚1 个月前
C++(手写Mystring|柔性数组、引用计数与写时拷贝的核心用法)
柔性数组
星轨初途2 个月前
【C/C++底层修炼】拆解动态内存管理:四大动态内存函数、六大错误与柔性数组
c语言·开发语言·c++·经验分享·笔记·柔性数组