柔性数组-2021-4-11

柔性数组成员:

在结构体中,最后数组成员未指定大小。数组的大小可以调整,这个数组就称为柔性数组成员。

#include<stdio.h>
#include<malloc.h>
struct s
{
	int a;   
	char arr[];// 柔性数组成员:在结构体中,最后数组成员未指定大小。数组的大小可以调整,这个数组就称为柔性数组成员
};             // char arr[0];  方块零--这样写也可以。
int main(void)  // malloc 次数越多,内存碎片越多,柔性数组碎片更少。
{
	struct s* ps= (struct s *)malloc(sizeof(struct s) + 5 * sizeof(char));//动态开辟结构体大小。内存连续 访问效率高
	ps->a = 100;
	int i = 0;
	printf("%d \n",sizeof(struct s));//4 不计算柔性数组的大小。
	if (ps != NULL) //动态开辟的内存一定要检查是否为空指针。
	{
		for (size_t i = 0; i < 5; i++)
		{
			ps->arr[i] = i;
			printf("%d \n", ps->arr[i]);
		}
	}
	//动态追加内存arr。
	struct s* ptr = (struct s*)realloc(ps,20);
	if (ptr!=NULL)
	{
		ps = ptr;
	}
	for (size_t i = 0; i <15; i++)
	{
		ps->arr[i] = i;
		printf("%d \n",ps->arr[i]);	
	}
	printf("%d \n", ps->a);
	free(ps);//释放内存
	ps = NULL;

	return 0;
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值