摘要:柔性数组定义柔性数组柔型数组定义的时候应当注意数组在结构体内不能作为第一个元素。定义完成之后,我们对数组容量进行第一次扩容在使用对数组扩容之后,我们要注意,对返回来的地址必须进行判断,以防扩容失败。
我们平时在编程的时候,经常会用到数组。在定义数组大小的时候,如果小了那么使用的空间便会不足;如果赋予数组过多的空间,则会造成空间浪费。
今天,我们来讲一讲关于柔性数组的概念,顾名思义,柔型数组的大小应当是可以随使需要而扩大和缩小的。
柔性数组定义:
//柔性数组struct arr{ int i; int a[];};
柔型数组定义的时候应当注意:数组在结构体内不能作为第一个元素。其次,柔性数组的大小是不包括结构体内定义的数组的,按上面的例子,那么它的大小应当是4个字节。
定义完成之后,我们对数组容量进行第一次扩容:
int i = 0; struct arr* p = malloc(sizeof(struct arr) + 10 * sizeof(int)); if (p == NULL) { printf("%s/n", strerror(errno)); return -1; } p->i = 100; for (i = 0; i < 10; i++) { p->a[i] = i; } for (i = 0; i < 10; i++) { printf("%d ",p->a[i]); }
在使用malloc对数组扩容之后,我们要注意,对malloc返回来的地址必须进行判断,以防扩容失败。
我们在验证之后对数组进行赋值,下面我们运行一下:
假若我们现在想要在数组里面放20个元素,那么我们就要对数组再次扩容:
struct arr* ptr = realloc(p, sizeof(struct arr) + 20 * sizeof(int)); if (ptr == NULL) { return -1; } p = ptr; for (i = 10; i < 20; i++) { p->a[i] = i; } for (i = 10; i < 20; i++) { printf("%d ", p->a[i]); } free(p); p = NULL; return 0;
第二次扩容我们同样得对返回的地址进行检查。确认过后我们将返回的地址赋给p,然后在对数组内元素赋值。
最后,我们应将两次扩容的空间释放掉,并将p置为空指针。
运行结果:
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/121242.html
摘要:柔性数组笔记自取柔性数组笔记欢迎喜欢学习的朋友互关一起努力博主目前在学习语言转码道路艰险,需要你们的支持文章目录柔性数组什么是柔性数组柔性数组成员的创建柔性数组成员特点两种方式创建柔性数组成员什么是柔性数组中,结构 ...
摘要:释放不完全导致内存泄漏。既然把柔性数组放在动态内存管理一章,可见二者有必然的联系。包含柔性数组的结构用进行动态内存分配,且分配的内存应大于结构大小,以满足柔性数组的预期。使用含柔性数组的结构体,需配合以等动态内存分配函数。 ...
摘要:动态内存函数的介绍和语言提供了一个动态内存开辟的函数,它的函数原型是这样的这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针。 目录 为什么存在动态...
摘要:栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。栈区主要存放运行函数而分配的局部变量函数参数返回数据返回地址等。 C语言动态内存分配篇 目录 一、为什么存在动态内存管理/分配? 内存的存储形式划分 二、动态内存函数的介绍 malloc ...
摘要:在语言或内置的库中有能够进行动态内存开辟的库函数。动态内存管理函数参数表示需要开辟的内存的字节数。将动态申请的整型数组元素个数调整至。 ⭐️前面的话⭐️ 大家好!在...
阅读 1011·2023-04-26 00:47
阅读 3403·2021-11-16 11:53
阅读 585·2021-10-08 10:05
阅读 873·2021-09-27 13:35
阅读 2505·2021-09-22 15:19
阅读 2798·2019-08-30 15:55
阅读 2624·2019-08-29 16:55
阅读 2744·2019-08-29 15:20