C语言如何使用柔性数组
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,这篇文章主要介绍了C语言如何使用柔性数组,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一.柔性数组的特点struct S{
千家信息网最后更新 2025年01月20日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安全错误
数据库的锁怎样保障安全
服务器怎么上架到机柜中
云南云主机品牌服务器
reca数据库
国内数据库的市场份额
hp服务器磁盘管理
ftp服务器 迅雷
qq邮箱的发件收件服务器怎么填
部队网络安全自查自评
经营范围 软件开发及
个性化软件开发价格合理
软件开发最后会有什么工作
its网络技术
网络安全法第一个
专利数据库类数据库哪个强大
低年级网络安全教育课件
新世纪互联网科技公司
江苏工控软件开发公司
管理员身份启动服务器
启明星辰网络安全审计系统
怎么看网络安全网址
网络安全管理人员培训内容
软件测试转软件开发难嘛
洛克王国怎么看不到服务器
大学生如何正确利用网络技术
LUM数据库技术技巧
开发区软件开发
江苏工控软件开发公司
腾讯会议的服务器是放在哪里
郑州商城软件开发放心省心
苹果简单软件开发