C语言 柔性数组

文章目录

定义

C语言中的柔性数组(Flexible Array)是一种特殊的数组类型,它的长度可以在运行时动态确定。柔性数组通常用于结构体的最后一个成员,用于表示可变长度的数据。

c 复制代码
struct Example {
    int length;
    int data[]; // 柔性数组
};

特性:

  1. 结构中的柔性数组成员前面必须至少一个其他成员。
  2. sizeof 返回的这种结构大小不包括柔性数组的内存。
  3. 包含柔性数组成员的结构用malloc ()函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小。即如果使用malloc一次性分配空间,结构体总空间满足: maollc总空间 = 其他结构体内成员空间 + 柔性数组空间 ;

使用

方法1 : 直接对整个接结构体使用动态内存分配函数 。 分配内存满足 maollc总空间 = 其他结构体内成员空间 + 柔性数组空间 ;

c 复制代码
typedef struct st_type
{
 int i;
 int a[0];//柔性数组成员
}type_a;


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);

方法2 :分别对结构体内的每个成员使用动态分配内存函数,值得注意的是,此方法释放内存时,也要分别释放 ;

c 复制代码
typedef struct st_type
{
 int i;
 int *p_a;
}type_a;


type_a *p = (type_a *)malloc(sizeof(type_a));
p->i = 100;
p->p_a = (int *)malloc(p->i*sizeof(int));

for(i=0; i<100; i++)
{
 p->p_a[i] = i;
}

//释放空间
free(p->p_a);
p->p_a = NULL;
free(p);
p = NULL;
相关推荐
leaves falling22 分钟前
C/C++ 的内存管理,函数栈帧详讲
java·c语言·c++
XY_墨莲伊2 小时前
【编译原理】实验二:基于有穷自动机FA词法分析器设计与实现
c语言·开发语言·c++·python
网域小星球3 小时前
C语言从0入门(二十三)|预处理:#define、#include、条件编译详解
c语言·开发语言
水云桐程序员3 小时前
用C语言写LED灯嵌入式系统案例|STM32 LED控制与按键输入系统
c语言·stm32·单片机
励志的小陈4 小时前
数据结构--队列(C语言实现)
c语言·开发语言·数据结构
m0_716765236 小时前
数据结构--单链表的插入、删除、查找详解
c语言·开发语言·数据结构·c++·笔记·学习·visual studio
itman3016 小时前
C语言printf输出格式:%d %f %s等用法详解
c语言·字符串·printf·格式化输出·整数
我不是懒洋洋7 小时前
【经典题目】链表OJ(相交链表、环形链表、环形链表II、随机链表的复制)
c语言·开发语言·数据结构·链表·ecmascript·visual studio
聆风吟º7 小时前
【C标准库】深入理解C语言strstr函数:子字符串查找的实用指南
c语言·开发语言·库函数·strstr
算法鑫探7 小时前
C语言实现 简易计算器教程
c语言·数据结构·算法·新人首发