C语言如何使用柔性数组
发表于:2024-10-26 作者:千家信息网编辑
千家信息网最后更新 2024年10月26日,这篇文章主要介绍了C语言如何使用柔性数组,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一.柔性数组的特点struct S{
千家信息网最后更新 2024年10月26日C语言如何使用柔性数组
这篇文章主要介绍了C语言如何使用柔性数组,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
一.柔性数组的特点
struct S{ int x; int a[];};int main(){ printf("%d", sizeof(S));}
这段代码的输出是什么?
我们打印结构体S所占空间的大小,这个a[]占多少字节呢?
输出结果是4,可一个int类型的x就是4了,a[]去哪了?好奇怪哦。
原来,这是一种柔性数组。
1.结构体中最后一个元素允许是未知大小的数组,这个数组就是柔性数组。
2.结构中的柔性数组前面必须有至少一个其他成员。
3.sizeof返回的这种结构大小不包括柔性数组的内存。
4.包含柔数组成员的结构用malloc函数进行内存的动态分配,且分配的内存应该大于结构的大小,以适应柔性数组的预期大小。
二.柔性数组的使用
1.如何使用柔性数组
包含柔数组成员的结构用malloc函数进行内存的动态分配,
且分配的内存应该大于结构的大小,以适应柔性数组的预期大小。
#define _CRT_SECURE_NO_WARNINGS 1#include#include struct S{ int x; int a[];};int main(){ //为柔性数组a[]开辟了40个字节的空间 struct S *ps =(struct S*)malloc(sizeof(struct S) + 40); if (ps == NULL) //检查是否为空指针 { perror("ps"); return 1; } ps->x = 10; int i = 0; for (i = 0; i < 10; i++) { ps->a[i] = i; //数组使用 } for (i = 0; i < 10; i++) { printf("%d ",ps->a[i]); //数组打印 } //若觉得40不够用,可用realloc扩容 //如: struct S* ptr = (struct S*)realloc(ps, sizeof(struct S) + 80); if (ptr == NULL) //检查是否为空指针 { perror("realloc"); return 1; } else { ps = ptr; } free(ps); //释放内存并置为空指针 ps = NULL;}
2.不用柔性数组的话有什么代替
我们经常用字符串指针来申请空间,
那我们直接给字符串指针malloc一块空间,不就行了吗,
为什么还要用柔性数组呢?
#define _CRT_SECURE_NO_WARNINGS 1#include#include struct S{ int x; int *a;};int main(){ struct S* ps = (struct S*)malloc(sizeof(struct S) );//为结构体变量x开辟空间 if (ps == NULL) { return 1; } ps->a = (int*)malloc(40); //为字符串指针开辟40个字节的空间 if (ps->a == NULL) { free(ps); ps = NULL; return 1; } free(ps->a); ps->a = NULL; free(ps); ps = NULL;}
上述代码确实可以完成相同的功能,
但是柔性数组相对而言更好。
让我们来看看柔性数组的优势。
三.柔性数组的优势
1.方便内存释放
使用柔性数组我们只用free一次,
而使用字符串指针要free两次,有内存泄漏的风险
2.提高访问速度
柔性数组malloc了一次,是连续的内存,
有益于提高访问速度,减少内存碎片。
感谢你能够认真阅读完这篇文章,希望小编分享的"C语言如何使用柔性数组"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!
数组
柔性
内存
结构
大小
指针
空间
字符
字符串
篇文章
分配
字节
成员
语言
代码
优势
函数
动态
就是
速度
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全原因具备的条件有
社保的管理客户端服务器连接异常
石家庄软件开发后端招聘
数据库Null是常量
艾科网络技术有限公司
荆州计算机软件开发条件
嘉定区智能软件开发处理方法
个人怎么做软件开发
火狐 代理服务器
数据库设置升序降序
泰山服务器怎么删除raid
江汉区国际网络安全维护联系人
洛阳软件开发前景如何
网络技术三级电子书籍分享
数据库的宏的有关问题
aspx获取数据库数据
管理软件开发工程师的内容
永恒之蓝驱动网络安全吗
java软件开发 码农
达内学网络安全
网络安全等级保护上了后系统变慢
服务器安全电压超出范围
网络安全领导责任
中科院数据库入库信息
miui更新服务器地址
高校通信网络技术与应用就业
网络安全环境的保证
网络安全能力成熟度
怎样关闭数据库连接
简述数据库系统安全的含义