当前位置:网站首页>How to use flexible arrays?
How to use flexible arrays?
2022-07-06 22:31:00 【It's Beichen not too PI acridine】
How to use flexible arrays ?
First of all, 0 Length array , Also called flexible array Make an explanation :
purpose : The length is 0 The main purpose of the array is to meet the need for variable length structures
usage : At the end of a structure , Declare a length of 0 Array of , You can make the structure variable in length . For compilers , In this case, the length is 0 The array of does not take up space , Because the array name itself doesn't take up space , It's just an offset , The array name itself represents an immutable address constant
C99 in , The last element in the structure is allowed to be an array of unknown size , This is called a flexible array member , But a flexible array member in a structure must be preceded by at least one other member . Flexible array members allow structures to contain an array of variable size .sizeof The size of the structure returned does not include the memory of the flexible array . Structures that contain flexible array members use malloc () Function to dynamically allocate memory , And the allocated memory should be larger than the size of the structure , To fit the expected size of the flexible array .
How to use flexible arrays ? Here's an example :
typedef struct st_type
{
int i;
int a[0];
}type_a;
Some compilers will report errors and cannot compile. They can be changed to :
typedef struct st_type
{
int i;
int a[];
}type_a;
this sample I People Just can With set The righteous One individual can change Long Of junction structure body , use sizeof(type_a) have to To Of only Yes 4 , Just yes sizeof(i)=sizeof(int). that 0 An array of elements doesn't take up space , Then we can do the lengthening operation .
Allocate memory to the structure through the following expression :
type_a *p = (type_a*)malloc(sizeof(type_a)+100*sizeof(int));
So we give the structure pointer p Allocated a block of memory . use p->item[n] You can simply access variable length elements . But then we use sizeof(*p) Test the size of the structure , It's still found that 4. Isn't it weird ? We allocated space to this array ?
When defining this structure , The size of the module has determined the memory size that does not contain flexible arrays . Flexible arrays are just non staff , It does not occupy the compilation of the structure . Just say that when using a flexible array, you need to treat it as a member of the structure , That's it . And white points , Flexible arrays have nothing to do with structures , It's just “ Selling dog meat with sheep's head ” nothing more , Not a full member of the structure .
C89 I don't support this kind of thing ,C99 Add it to the standard as a special case . however ,C99 What is supported is that incomplete type, instead of zero array, It's the same int item[0]; This form is illegal ,C99 The form of support is in the form of int item[]; It's just that some compilers put int item[0]; As a non-standard extension to support , And in C99 There was this nonstandard extension before the release ,C99 After the release , Some compilers combine the two .
Of course , Since the top is used malloc Function allocates memory , Definitely need to use free Function to free memory :
free(p);
Application scenarios : Variable length arrays are often used in network communication to construct indefinite length packets , Don't waste space, waste network traffic .
边栏推荐
- 如何用程序确认当前系统的存储模式?
- 基于 QEMUv8 搭建 OP-TEE 开发环境
- What are the specific steps and schedule of IELTS speaking?
- POJ 1258 Agri-Net
- Plafond du tutoriel MySQL, bien collecté, regardez lentement
- 空结构体多大?
- Comparison between variable and "zero value"
- sizeof关键字
- config:invalid signature 解决办法和问题排查详解
- Installation and use of labelimg
猜你喜欢

剑指offer刷题记录1

Attack and defense world ditf Misc

0 basic learning C language - interrupt

C# 三种方式实现Socket数据接收

Mise en place d'un environnement de développement OP - tee basé sur qemuv8

每日一题:力扣:225:用队列实现栈

Signed and unsigned keywords

基于 QEMUv8 搭建 OP-TEE 开发环境

Aardio - 利用customPlus库+plus构造一个多按钮组件

关于声子和热输运计算中BORN电荷和non-analytic修正的问题
随机推荐
Management background --5, sub classification
硬件开发笔记(十): 硬件开发基本流程,制作一个USB转RS232的模块(九):创建CH340G/MAX232封装库sop-16并关联原理图元器件
poj 1094 Sorting It All Out (拓扑排序)
软考高级(信息系统项目管理师)高频考点:项目质量管理
Lora sync word settings
return 关键字
第4章:再谈类的加载器
Attack and defense world miscall
UE4蓝图学习篇(四)--流程控制ForLoop和WhileLoop
volatile关键字
树的先序中序后序遍历
The ceiling of MySQL tutorial. Collect it and take your time
Installation and use of labelimg
MySQL ---- first acquaintance with MySQL
0 basic learning C language - interrupt
labelimg的安装与使用
自制J-Flash烧录工具——Qt调用jlinkARM.dll方式
SQL Server生成自增序号
NPDP certification | how do product managers communicate across functions / teams?
Leetcode: interview question 17.24 Maximum cumulative sum of submatrix (to be studied)