柔性数组

这个东西比较冷门,但它的确存在,即使应用场景很少。

C99中,结构中的最后一个元素允许是未知大小的数组,这就叫做柔性数组成员;

但是,柔性数组前面必须至少有一个成员,而且sizeof返回的这种结构大小不包含柔性数组的内存;

包含柔性数组的结构用malloc()函数进行内存的动态分配,并且分配的内存大小应该大于结构的大小,以适应柔性数组的预期大小;

例如:

#include <stdio.h>
#include <Windows.h>

typedef struct st_type
{
	int i;
	int a[];
}type_a;
int main()
{
	//柔性数组,结构体中最后一个元素允许未知大小的数组,这就叫做柔性数组。
	int i = sizeof(type_a);
        printf("%d\n", i);
	system("pause");
	return 0;
}

你会发现代码中定义了一个“a[ ]”,看着很奇怪,它就是柔性数组;

运行代码:



代码正常运行,且输出结果为4;

柔性数组值是编外人员,不占结构体的编制;

再看一段代码:

#include <stdio.h>
#include <Windows.h>

typedef struct st_type
{
	int i;
	int a[];
}type_a;
int main()
{
	//柔性数组,结构体中最后一个元素允许未知大小的数组,这就叫做柔性数组。
	int j = 0;
	type_a *p = (type_a*)malloc(sizeof(type_a) + 100 * sizeof(int));
	p->i = 10;
	for (j = 0; j < 100; j++)
	{
		p->a[j] = j;
	}
	free(p);
	p = NULL;
	system("pause");
	return 0;
}
动态申请一块内存,且在执行完命令进行内存释放时仅用释放一次就可以;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值