柔性数组知识点

  什么是柔性数组

什么是柔性数组?柔性数组其实也是动态内存管理部分的内容。这节主要来复习柔性数组的知识点。 

当结构体的最后一个成员为数组, 且这个数组的大小未确定时, 我们就称它是柔性数组。

如:

struct stu{char name[20];int age;char adress[];}

这里的adress就是一个柔性数组。 (写成char adress[0] 可能报错)

柔性数组的特点 

特点1. 柔性数组成员之前必须有一个其他成员。 

特点2. 进行结构体大小计算时不包含柔性数组成员的大小。如:
 

struct a{int i;int a[];}

 结构体a的大小是4,没有计算a的大小。 

柔性数组的使用

typedef struct a{int i;int price[];}type_a;int main(){type_a* tmp = (type_a*)malloc(sizeof(type_a) + sizeof(int) * 10); //这里的第一个sizeof是计算                                                                                                                 //的第一个成员i的大小,                                                                                                                     //+后面的计算的是为prince                                                                                                                 //这个柔性数组开辟的空间for(int j = 0; j < tmp->i;  j++){tmp->price[ j ] = j;        }free(tmp);return 0;}

柔性数组使用的好处

好处1.

通过上面的使用我们可以发现, 我们使用柔性数组时,是定义一个结构体指针, 然后通过动态内存分配直接申请一块大的内存。 这些内存显然是连续的。 而柔性数组的大小也随着分配确定了下来一起成为一个确定的结构体。 而后续当我们完成使用后, 想要释放空间时, 我们只需要通过那个结构体指针来释放掉这块空间就好。 

但是如果我们不使用柔性数组, 而是把柔性数组改成一个指针呢。我们会怎么做, 为了达成上面的效果, 我们会通过动态内存分配申请一大块内存, 将这块内存给给这个指针。 但是, 这里就有了一个问题,那就是这个指针所指向的内存空间和结构体的内存空间不是连续的(随即开辟, 有可能连续, 但是几率太小)。这样的话, 假如我们通过结构体指针释放结构体内存时, 那个我们为结构体的成员指针开辟的空间就泄露了。 出现问题。 这就是二次分配问题需要注意的地方。 我们要先释放成员指针指向的内存空间。 再释放结构体内存空间。 

用户使用的时候有时候是不知道具体的代码是怎么实现的。 所以柔性数组可以很好的规避二次分配出现的问题。

好处2.使用柔性数组因为空间是连续的, 所以能加快程序运行速度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/743093.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python使用】嘿马头条完整开发md笔记第1篇:课程简介,ToutiaoWeb虚拟机使用说明【附代码文档】

嘿马头条项目从到完整开发笔记总结完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;课程简介&#xff0c;ToutiaoWeb虚拟机使用说明&#xff0c;Pycharm远程开发&#xff0c;产品与开发&#xff0c;数据库1 产品介绍,2 原型图与UI图,3 技术架构,4 开发。OS…

探索大语言模型(LLM):部分数据集介绍

探索大语言模型&#xff08;LLM&#xff09;的宝库&#xff1a;精选数据集介绍 在人工智能的黄金时代&#xff0c;大语言模型&#xff08;LLM&#xff09;的发展正以惊人的速度推进。它们不仅改变了我们与机器交互的方式&#xff0c;还在持续拓展技术的边界。作为这一进程的核…

STM32第七节:GPIO输入——按键检测(包含带参宏)

目录 前言 STM32第七节&#xff1a;GPIO输入——按键检测&#xff08;包含带参宏&#xff09; 带参宏 代码替换展示 定义带参宏 GPIO输入——按键检测 硬件部分 端口输入数据寄存器&#xff08;GPIOx_IDR&#xff09; 编写程序 配置以及编写bsp_key文件 main函数编程…

5. git 删除版本标签

要删除本地的 Git 标签&#xff0c;你可以使用 git tag -d 命令&#xff0c;后面跟上你想要删除的标签名。 以下是如何操作的步骤&#xff1a; 1.打开命令行界面&#xff08;终端或命令提示符&#xff09;。 2.导航到你的 Git 仓库所在的目录。 3.使用以下命令删除标签&…

SpringBoot(Lombok + Spring Initailizr + yaml)

1.Lombok 1.基本介绍 2.应用实例 1.pom.xml 引入Lombok&#xff0c;使用版本仲裁 <!--导入springboot父工程--><parent><artifactId>spring-boot-starter-parent</artifactId><groupId>org.springframework.boot</groupId><version&g…

arcgis在GIS滑坡易发性分析中的应用技术研究

我国是地质灾害多发国家&#xff0c;地质灾害的发生无论是对于地质环境还是人类生命财产的安全都会带来较大的威胁&#xff0c;因此需要开展地质灾害风险普查。利用遥感&#xff08;RS&#xff09;技术进行地质灾害调查工作具有宏观、快速、准确的特点&#xff0c;能反映出地质…

空调 USACO2021

题目描述&#xff1a; 思路&#xff1a; 此题非常有技巧&#xff0c;我们首先可以先把希望温度和实际温度做差&#xff0c; 问题就转化成&#xff0c;把这个温度差如何去全都变为0&#xff0c;相对应的变成希望温度 也就是 去给温度差数组去做差分&#xff0c;因为&#xff0…

【正则表达式】正则表达式里使用变量

码 const shuai No My Name Is ShuaiGe.match(new RegExp(shuai, gi)); //↑↑↑↑↑↑↑↑ //等同于 //↓↓↓↓↓↓↓↓ /No/.test(My Name Is ShuaiGe)用作领域 搜索的字符动态改变&#xff0c;例如↓模糊搜索例&#xff1a; 一个文本宽&#xff0c;输入文本模糊搜索用户…

SpringCloud Gateway 新一代网关

一、前言 接下来是开展一系列的 SpringCloud 的学习之旅&#xff0c;从传统的模块之间调用&#xff0c;一步步的升级为 SpringCloud 模块之间的调用&#xff0c;此篇文章为第六篇&#xff0c;即介绍 Gateway 新一代网关。 二、概述 2.1 Gateway 是什么 Gateway 是在 Spring 生…

基于SSM的协同过滤算法的电影推荐系统(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的协同过滤算法的电影推荐系统&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:TextArea)

多行文本输入框组件&#xff0c;当输入的文本内容超过组件宽度时会自动换行显示。 高度未设置时&#xff0c;组件无默认高度&#xff0c;自适应内容高度。宽度未设置时&#xff0c;默认撑满最大宽度。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&…

Elastic random_score的使用

random_score的使用 在Elasticsearch中&#xff0c;random_score查询可以用来随机排序搜索结果&#xff0c;这对于实现诸如轮播、随机推荐等功能非常有用。 random_score的语法 GET /<索引名>/_search {"query": {"function_score": {"query…

【Docker】APISIX Ingress Controller部署

APISIX Ingress Controller环境标准软件基于Bitnami apisix-ingress-controller:构建。当前版本为1.8.0 你可以通过轻云UC部署工具直接安装部署&#xff0c;也可以手动按如下文档操作&#xff0c;该项目已经全面开源&#xff0c;可以从如下环境获取 配置文件地址: https://git…

前端面试 ===> 【Vue2】

Vue2 相关面试题总结 1. 谈谈对Vue的理解 Vue是一种用于构建用户页面的渐进式JavaScript框架&#xff0c;也是一个创建SPA单页面应用的Web应用框架&#xff0c;Vue的核心是 数据驱动试图&#xff0c;通过组件内特定的方法实现视图和模型的交互&#xff1b;特性&#xff1a;&a…

选型|匠芯创工业级显示控制MCU

D13x系列微控制器 匠芯创D13x系列是一款基于RISC-V架构的高性能、国产自主、工业级跨界MCU&#xff0c;配备强大的2D图形加速、PNG解码、JPEG编解码引擎&#xff0c;具有丰富的屏接口&#xff0c;具有工业宽温、高可靠性、高开放性&#xff0c;可广泛应用于工业HMI、网关、串口…

解决vue2+elementUI的下拉框出现自动校验的问题

问题&#xff1a; 总结原因是因为新增的时候&#xff0c;传了空值进去 可以这样子解决 this.formData.value && this.$set(this.model, this.formData.key, this.formData.value)这种是只有值存在的时候才会给他赋值&#xff0c;但是这只解决单选下拉框&#xff0c;…

【华为OD机试】爱吃蟠桃的孙悟空【C卷|200分】

【华为OD机试】-真题 !!点这里!! 【华为OD机试】真题考点分类 !!点这里 !! 题目描述 孙悟空爱吃蟠桃,有一天趁着蟠桃园守卫不在来偷吃。已知蟠桃园有 N 棵桃树, 每颗树上都有桃子,守卫将在 H 小时后回来。 孙悟空可以决定他吃蟠桃的速度K(个/小时),每个小时选一颗桃树…

办公DevOps:即时消息是其他系统的最后一公里

DevOps的理念可以落实到办公领域。办公DevOps的关键点是: 即时消息成为其他系统的最后一公里。其他系统的条目可以作为卡片通过即时消息发送&#xff0c;也可以在即时消息系统中点开卡片进行后续处理&#xff0c;而不需要打开其他系统。 其他系统的条目在即时消息中以类似“小程…

Rust 的 inline 内联编译策略

在 Rust 中&#xff0c;与 C 或 C 中的 inline 关键字不同&#xff0c;Rust 没有一个直接的 inline 编译指示。然而&#xff0c;Rust 编译器在编译时会进行一系列的优化&#xff0c;包括函数内联&#xff0c;这是为了提高代码的执行效率。 Rust 的编译器&#xff08;rustc&…

隧道技术和代理技术(三)

隧道技术 知识点 -隧道技术&#xff1a;解决不出网协议上线的问题&#xff08;利用出网协议进行封装出网&#xff09; -代理技术&#xff1a;解决网络通讯不通的问题&#xff08;利用跳板机建立节点后续操作&#xff09; 内环境示意图&#xff0c;方便理解 思路&#xff1a;…