动态内存管理之柔性数组

这篇具有很好参考价值的文章主要介绍了动态内存管理之柔性数组。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

柔性数组:
只存在于结构体中,而且还要是结构体的最后一个成员,并且在他的前面必须要有其他成员,
大小是未知的,所以在用sizeof计算出的结构体大小是出柔性数组外的,
动态内存管理之柔性数组,柔性数组,c语言,数据结构
柔性数组的大小是可以变化的,那么如何调整柔性数组的大小呢,
想到调整大小我们就可以想到动态内存分配
所以我们可以首先用malloc函数为柔性数组开辟一个动态内存,
再用realloc函数调整空间大小
动态内存管理之柔性数组,柔性数组,c语言,数据结构
想要实现这样的把结构体大小做调整的操作,除了在结构体中包含柔性数组外,我们还可以在结构体中包含指针


struct S {
	int a;
	int* arr;
};
int main()
{
	struct S* p=(struct S*)malloc(sizeof(struct S));//先定义一个结构体指针,并给开辟空间
	if (p == NULL)
	{
		perror("malloc->p");
		return 1;
	}
	p->arr = (int*)malloc(40);//然后再通过结构体指针找到arr指针,对arr指针指向的区域开辟空间
	if (p->arr == NULL)
	{
		perror("malloc->arr");
		return 1;
	}
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		p->arr[i] = i + 1;
	}
	for (i = 0; i < 10; i++)
	{
		printf("%d\n", p->arr[i]);
	}
	//调整
	int* pc=(int*)realloc(p->arr, 60);
	if (pc == NULL)
	{
		perror("realloc");
		return 1;
	}
	p->arr= pc;
	for (i = 0; i < 15; i++)
	{
		printf("%d\n", p->arr[i]);
	}
	//释放
	free(p->arr);
	p->arr = NULL;
	free(p);
	p=NULL;
	return 0;
}

原理图
动态内存管理之柔性数组,柔性数组,c语言,数据结构文章来源地址https://www.toymoban.com/news/detail-605739.html

到了这里,关于动态内存管理之柔性数组的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 超详细——动态内存分配+柔性数组

    ☃️个人主页:fighting小泽 🌸作者简介:目前正在学习C语言和数据结构 🌼博客专栏:C语言学习 🏵️欢迎关注:评论👊🏻点赞👍🏻留言💪🏻 我们已经学会的内存开辟方式有:创建一个变量,创建一个数组 我们创建一个整形变量就会申请4个字节,创建个数组就会申请

    2023年04月15日
    浏览(48)
  • 柔性数组和C语言内存划分

    也许你从来没有听说过 柔性数组 (flexible array)这个概念,但是它确实是存在的。 C99 中,结构中的最后⼀个元素允许是未知大小的数组,这就叫做『柔性数组』成员。 例如: 有些编译器会报错⽆法编译可以改成: 1.1 柔性数组的特点: 结构中的柔性数组成员前面必须至少⼀

    2024年01月22日
    浏览(43)
  • 【C语言】动态内存管理(C语言的难点与精华,数据结构的前置知识,你真的掌握了吗?)

    学习专栏 : 《零基础学C语言》 《数据结构世界》 俗话说的好,要想学好 数据结构 (数据结构世界,对数据结构感兴趣的小伙伴可以移步),就必须学好以下三方面知识: 指针 不允许你还不了解指针的那些事(一)(内存和地址+指针变量+指针运算+野指针+传址调用) 不

    2024年02月05日
    浏览(42)
  • 数据结构之动态内存管理机制

      目录 数据结构之动态内存管理机制 占用块和空闲块 系统的内存管理 可利用空间表 分配存储空间的方式 空间分配与回收过程产生的问题 边界标识法管理动态内存 分配算法 回收算法 伙伴系统管理动态内存 可利用空间表中结点构成 分配算法 回收算法 总结 无用单元收集(

    2024年02月12日
    浏览(40)
  • C语言数据结构一:动态数组

    先说一个概念:数组是一段 连续 的内存空间。存储相同的数据类型。 数组的两个关键点: 连续内存; 相同类型。 首先连续内存:所以为了找到动态数组我们必须找到一个 首元素 地址。(内存 首地址 。) 如果不知道首地址,那无法找到并操作内存空间。 知道首地址了,

    2024年02月06日
    浏览(41)
  • [C语言][数据结构][动态内存空间的开辟]顺序表的实现!

    目录 零.必备知识 a.顺序表的底层是数组. b.数组在内存中是连续存放的. c.动态内存空间的开辟(malloc,calloc,realloc). 一.顺序表的定义与实现          1.1 顺序表的定义          1.2 顺序表的初始化          1.3 顺序表的销毁          1.4 顺序表容量的检查与调整

    2024年04月09日
    浏览(85)
  • 【C语言】还有柔性数组?

    也许你从来没有听说过柔性数组(flexible array)这个概念,但是它确实是存在的。C99中, 结构中的最后⼀个元素允许是未知⼤⼩的数组 ,这就叫做『柔性数组』成员。 欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 目录 前言 柔性数组 柔性数组的特

    2024年03月10日
    浏览(38)
  • 【C进阶】分析 C/C++程序的内存开辟与柔性数组(内有干货)

            本文是对于动态内存管理知识后续的补充,以及加深对其的理解。对于动态内存管理涉及的大部分知识在这篇文章中 ---- 【C进阶】 动态内存管理_Dream_Chaser~的博客-CSDN博客         本文涉及的知识内容主要在两方面: 简单解析C/C++程序的内存开辟 分析柔性数组

    2024年02月09日
    浏览(42)
  • C语言探索旅程之【柔性数组】

    目录 1. 柔性数组的定义 2. 柔性数组的使用 3. 柔性数组的注意事项 4. 柔性数组的优点 5. 柔性数组的应用场景 当我们谈到C语言中的柔性数组时,我们指的是一种特殊的数组,其大小在运行时动态确定,而不是在编译时确定。柔性数组是C语言中一种非常有用且灵活的特性,特

    2024年03月22日
    浏览(72)
  • C语言 — 动态内存管理(动态内存函数)

    本期分为三篇介绍动态内存管理相关内容,关注博主了解更多 博主博客链接:https://blog.csdn.net/m0_74014525 本期介绍动态内存函数,函数如何使用、函数格式、在使用在所需要的注意点及C/C++程序的内存开辟区域 第一篇:C语言 — 动态内存管理(动态内存函数) 第二篇:C语言

    2024年02月14日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包