认识柔性数组

news2025/2/22 20:02:04

在C99中,结构中的最后一个元素允许是未知大小的数组,这就叫做柔性数组成员

限制条件是:

  1. 结构体中
  2. 最后一个成员
  3. 未知大小的数组

1.柔性数组的形式

那么我们怎样写一个柔性数组呢

typedef struct st_type
{
    int i;
    int a[0];//柔性数组成员
}type_a;

有些编译器会报错无法编译,可以改成: 

typedef struct st_type
{
    int i;
    int a[];//柔性数组成员
}type_a;

2.柔性数组的特点

  • 结构中的柔性数组成员前面必须至少一个其他成员
  • sizeof返回的这种结构大小不包括柔性数组的内存
  • 包含柔性数组成员的结构用malloc()函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小

例如:

typedef struct st_type
{
	int i;
	int a[0];//柔性数组成员
}type_a;
printf("%d\n", sizeof(type_a));//输出结果是4

3.柔性数组的优势

第一个好处是:方便内存释放

如果我们的代码是在一个给别人用的函数中,在里面做了二次内存分配并把整个结构体返回给用户,用户调用free可以释放结构体,但是用户并不知道这个结构体内的成员也需要free,所以我们把结构体的内存及其成员需要的内存一次性分配好,并返回给用户一个结构体指针,用户做一次free就可以把所有的内存释放掉

第二个好处是:有利于访问速度

连续的内存有益于提高访问速度,也有益于减少内存碎片

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

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

相关文章

GD32F103x IIC通信

1. IIC通信 1.IIC的介绍 IIC总线有两条串行线,其一是时钟线SCK(同步),其二是数据线SDA。只有一条数据线属于半双工。应用中,单片机常常作为主机,外围器件可以挂载多个。(当然主机也可以有多个。…

【小程序 - 加强】自定义组件、使用npm包、全局数据共享、分包_05

目录 一、自定义组件 1. 组件的创建与引用 1.1 创建组件 1.2 引用组件 1.2.1 局部引用组件 1.2.2 全局引用组件 1.2.3 全局引用 VS 局部引用 1.2.4 组件和页面的区别 2. 样式 2.1 组件样式隔离 2.2 组件样式隔离的注意点 2.3 修改组件的样式隔离选项 2.4 styleIso…

stable diffusion学习笔记【2023-10-2】

L1:界面 CFG Scale:提示词相关性 denoising:重绘幅度 L2:文生图 女性常用的负面词 nsfw,NSFW,(NSFW:2),legs apart, paintings, sketches, (worst quality:2), (low quality:2), (normal quality:2), lowres, normal quality, (…

位置编码器

目录 1、位置编码器的作用 2、代码演示 (1)、使用unsqueeze扩展维度 (2)、使用squeeze降维 (3)、显示张量维度 (4)、随机失活张量中的数值 3、定义位置编码器类,我…

SpringBoot 可以同时处理多少请求

一、前言 首先,在Spring Boot应用中,我们可以使用 Tomcat、Jetty、Undertow 等嵌入式 Web 服务器作为应用程序的运行容器。这些服务器都支持并发请求处理的能力。另外,Spring Boot 还提供了一些配置参数,可以对 Web 服务器进行调…

传输层协议——TCP、UDP

目录 1、UDP 协议(用户数据报协议) 协议特点 报文首部格式 2、TCP 协议(传输控制协议) 协议特点 报文首部格式 TCP连接建立时的三次握手 TCP拆除连接的四次挥手 TCP的流量控制 TCP的拥塞控制 3、传输层端口号 三类端口…

一维数组和二维数组的使用(int类型)

目录 导读1. 一维数组1.1 一维数组的创建1.2 数组的初始化1.3 一维数组的使用1.4 一维数组在内存中的存储 2. 二维数组2.1 二维数组的创建2.2 二维数组的初始化2.3 二维数组的使用2.4 二维数组在内存中的存储 博主有话说 导读 本篇主要讲解一维数组和二维数组的创建和使用&…

【软考】4.2 关系代数

《 关系代数 》 表和表之间的逻辑运算 笛卡尔积:S1 x S2 投影:π;选择某一列(属性);一个关系R的投影操作结果也是一个关系,记作Πa,它由从关系R中选出的A列元素构成;选择…

React18入门(第二篇)——React18+Ts项目配置husky、eslint、pretttier、commitLint

前言 我的项目版本如下: React: V18.2.0Node.js: V16.14.0TypeScript:最新版工具: VsCode 本文将采用图文详解的方式,手把手带你快速完成在React项目中配置husky、prettier、commitLint,实现编码规范的统…

OpenNebula的配置与应用(一)

学习了OpenNebula的安装之后,接下来就是配置OpenNebula,内容包括配置Sunstone,VDC和集群,设置影像,模板管理,虚拟机管理等。OpenNebula还有大量的工作要做,这些工作主要来自映像、模板和虚拟机管…

[架构之路-225]:计算机硬件与体系结构 - 分类方法大汇总: RISC, CISC

目录 一、分类方法汇总 二、指令流和数据流的关系分类 三、Flynn 分类:指令并行处理 四、根据指令集架构(ISA)分类 4.1 分类 4.2 开源的RISC-V与封闭的RISC指令集架构比较 4.3 RISC-V的演进路径 4.4 RISC-V与中国芯片自研 4.4 五阶流…

服务网关Gateway_入门案例

创建cloud-gateway-gateway9527工程 pom文件引入依赖 <dependencies><!-- 引入网关Gateway依赖 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></depe…

基于SpringBoot的社区医院管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

修改npm全局安装的插件(下载目录指向)

我们先打开终端 然后执行 npm config get prefix查看npm 的下载地址 一般都会在C盘 但是 我们都知道 C盘下东西多了是很不好的 所以 我们可以执行 npm config set prefix “E:\npmfile”将 npm 的下载地址 改变成 E盘下的 npmfile目录 这样 以后 默认全局安装的插件就会都到…

Mesa新版来袭

Mesa 17.1.6 发布了&#xff0c;Mesa 是一个三维&#xff08;3D&#xff09;图形库的开源集合&#xff0c;其主要目标是在 Linux / UNIX 操作系统下实现各种 API&#xff08;应用程序编程接口&#xff09;和 OpenGL 规范。 它面向 3D 计算机图形&#xff0c;硬件加速 3D 渲染和…

获取上证50的所有股票代码

我们可以从网页&#xff08;板块 - 上证50_ - 股票行情中心 - 搜狐证券&#xff09;中获取&#xff0c; 然后打印出来&#xff1a; import requests from bs4 import BeautifulSoupurl "https://q.stock.sohu.com/cn/bk_4272.shtml" response requests.get(url) …

Python数据透视表

Python数据透视表 1、Excel数据透视表2、Python数据透视表 1、Excel数据透视表 数据透视表&#xff08;Pivot Table&#xff09;是一种交互式的表&#xff0c;可以进行某些计算&#xff0c;如求和与计数等。所进行的计算与数据跟数据透视表中的排列有关 之所以称为数据透视表…

世界前沿技术发展报告2023《世界航天技术发展报告》(四)载人航天技术

&#xff08;四&#xff09;载人航天技术 1. 概述2. 美国多家商业公司开展载人航天发射和测试任务2.1 美国SpaceX公司载人“龙”飞船开展常态化载人任务&#xff0c;并完成首次全商业性太空载人任务2.2 美国蓝色起源公司成功开展两次亚轨道载人飞行任务2.3 美国波音公司“星际客…

Leecode121: 买卖股票的最佳时机1 2 3

第一个思路是从前往后进行遍历&#xff0c;记录一个最小值&#xff0c;然后往后维护一个最大值&#xff0c;不停的减去即可。 买卖股票的最佳时机2&#xff1a; prices [7,1,2,5,6,4] 在第二天买入&#xff0c;在第五天卖出&#xff0c;和不断买入卖出是一样的&#xff0c;所…

Vue中如何进行数据导出与Excel导出

当在Vue.js应用程序中需要进行数据导出并生成Excel文件时&#xff0c;你可以使用一些库和技术来实现这一功能。在本文中&#xff0c;我们将介绍如何在Vue.js中进行数据导出&#xff0c;以及如何将数据导出到Excel文件。我们将使用vue-json-excel库&#xff0c;它是一个用于将JS…