柔性数组(C99新增)

1、柔性数组的定义

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

在这里插入图片描述

2、柔性数组的特点

在这里插入图片描述
在这里插入图片描述

3、柔性数组的使用

#define  _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
struct uion
{
	char i;//对齐数为1
	int c;//对齐数为4
	//大小为1+3+4=8
	int arr[];//未知数组大小
};
int main()
{
	//printf("%zd", sizeof(struct uion));
	struct uion* ptr=(struct uion*)malloc(sizeof(struct uion) + 20);
	if (ptr == NULL)
	{
		perror("malloc");
		return 1;
	}
	int i = 0;
	for (i = 0; i < 5; i++)
	{
		ptr->arr[i] = i;
	}

	for (i = 0; i < 5; i++)
	{
		printf("%d ", ptr->arr[i]);
	}
	//若空间不够开始扩展
	struct uion* pc=(struct uion*)realloc(ptr, sizeof(struct uion) + 40);
	if (pc != NULL)
	{
		ptr = pc;
	}
	else
	{
		perror("realloc");
		return 1;
	}
	free(ptr);
	ptr = NULL;
	return 0;
}

在这里插入图片描述

4、柔性数组的模拟使用

typedef struct uion
{
	char i;
	int c;
	int* date;
}uion;
int main()
{
	int i = 0;
	uion* pc = (uion*)malloc(sizeof(uion));
	if (pc == NULL)
	{
		perror("malloc1");
		return 1;
	}
	pc->i = 'w';
	pc->c = 1;
	pc->date = (uion*)malloc(20);
	if (pc->date == NULL)
	{
		perror("malloc2");
		return 1;
	}
	for (i = 0; i < 5; i++)
	{
				pc->date[i] = i;
	}
		
	for (i = 0; i < 5; i++)
	{
		printf("%d ", pc->date[i]);
	}
	//空间不够,扩展
	uion* ptr = (uion*)realloc(pc, 40);
	if (ptr != NULL)
	{
		pc = ptr;
	}
	else
	{
		perror("realloc");
		return 1;
	}
	free(pc->date);
	pc->date = NULL;
	free(pc);
	pc = NULL;
	return 0;
}

在这里插入图片描述

5、柔性数组的优势

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值