C语言复习--柔性数组

柔性数组是C99中提出的一个概念.结构体中的最后⼀个元素允许是未知大小的数组,这就叫做柔性数组成员。

格式大概如下

struct S

{

int a;

char b;

int arr\[\];//柔性数组

};

也可以写成

struct S

{

int a;

char b;

int arr0;//柔性数组

};

柔性数组的特点

柔性数组的使用

cpp 复制代码
#include<assert.h>
struct S
{
	int a;
	char b;
	int arr[];//柔性数组
};
int main()
{
	//柔性数组和其所在的结构体的空间都是malloc来的
	struct S* ptr = (struct S*)malloc(sizeof(struct S) + sizeof(int) * 10);
	assert(ptr);
	ptr->a = 10;
	ptr->b = 'x';
	for (int i = 0; i < 10; i++)
	{
		*(ptr->arr + i) = i;
	}
	printf("%d %c\n", ptr->a, ptr->b);
	for (int i = 0; i < 10; i++)
	{
		printf("%d ", ptr->arr[i]);
	}
	printf("\n");

    //如果觉得空间不够还可以用realloc来扩容

	//要释放空间
	free(ptr);
	ptr = NULL;
	return 0;
}

柔性数组的优势

上面的代码也可以用下面的代码来实现.两者功能完全相同.

cpp 复制代码
#include<assert.h>
struct S
{
	int a;
	char b;
	int* arr;//柔性数组
};
int main()
{
	struct S* ptr = (struct S*)malloc(sizeof(struct S));
	assert(ptr);
	ptr->arr = (int*)malloc(sizeof(int) * 10);
	assert(ptr->arr);
	ptr->a = 10;
	ptr->b = 'x';
	for (int i = 0; i < 10; i++)
	{
		*(ptr->arr + i) = i;
	}
	printf("%d %c\n", ptr->a, ptr->b);
	for (int i = 0; i < 10; i++)
	{
		printf("%d ", ptr->arr[i]);
	}
	printf("\n");
	free(ptr->arr);
	ptr->arr = NULL;
	free(ptr);
	ptr = NULL;
	return 0;
}

以上就是我了解到的柔性数组了.希望有所帮助.

相关推荐
星轨初途17 天前
【C++进阶】vector 类从入门到精通:核心接口与内存机制实战指南
c语言·开发语言·c++·经验分享·笔记·柔性数组
qq_2965532719 天前
[特殊字符] 旋转排序数组中的高效搜索:从线性到二分查找的进阶之路
数据结构·算法·搜索引擎·分类·柔性数组
图码19 天前
[特殊字符] 高效统计排序数组中目标元素的出现次数
数据结构·算法·排序算法·柔性数组·图搜索
图码21 天前
二分查找进阶:如何在有序数组中快速找到Upper Bound?
数据结构·算法·面试·分类·柔性数组
qq_2965532725 天前
[特殊字符] 搜索插入位置:从O(n)到O(log n)的优雅进化
数据结构·算法·面试·分类·柔性数组
LuminousCPP1 个月前
C 语言动态内存管理全解析:从基础函数到柔性数组与内存分区
c语言·经验分享·笔记·学习·柔性数组
凉茶钱1 个月前
【c语言】动态内存管理:malloc,calloc,realloc,柔性数组
c语言·c++·vscode·柔性数组
图码1 个月前
最大子数组和问题:从暴力到Kadane算法的优雅蜕变
数据结构·算法·动态规划·柔性数组
qq_296553271 个月前
[特殊字符] 数组中的递增三元组:O(n) 时间高效查找,面试必考!
数据结构·算法·面试·职场和发展·组合模式·柔性数组
qq_296553271 个月前
【LeetCode】最大子数组乘积:三种解法从暴力到最优
数据结构·算法·leetcode·职场和发展·动态规划·柔性数组