当前位置:网站首页>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 .
边栏推荐
- RESNET rs: Google takes the lead in tuning RESNET, and its performance comprehensively surpasses efficientnet series | 2021 arXiv
- Aardio - 不声明直接传float数值的方法
- 在IPv6中 链路本地地址的优势
- Gd32f4xx serial port receive interrupt and idle interrupt configuration
- MySQL数据库基本操作-DML
- Aardio - 利用customPlus库+plus构造一个多按钮组件
- [leetcode] 19. Delete the penultimate node of the linked list
- Netxpert xg2 helps you solve the problem of "Cabling installation and maintenance"
- Senior soft test (Information System Project Manager) high frequency test site: project quality management
- NPDP认证|产品经理如何跨职能/跨团队沟通?
猜你喜欢
随机推荐
memcached
Unity3d minigame unity webgl transform plug-in converts wechat games to use dlopen, you need to use embedded 's problem
Installation and use of labelimg
2022-07-05 使用tpcc对stonedb进行子查询测试
MySQL教程的天花板,收藏好,慢慢看
AdaViT——自适应选择计算结构的动态网络
图像的spatial domain 和 frequency domain 图像压缩
BasicVSR_PlusPlus-master测试视频、图片
The ceiling of MySQL tutorial. Collect it and take your time
Management background --5, sub classification
MySQL教程的天花板,收藏好,慢慢看
使用云服务器搭建代理
Aardio - 通过变量名将变量值整合到一串文本中
uniapp设置背景图效果demo(整理)
Assembly and interface technology experiment 5-8259 interrupt experiment
[leetcode] 19. Delete the penultimate node of the linked list
npm无法安装sharp
pytorch_YOLOX剪枝【附代码】
2022-07-05 stonedb sub query processing parsing time analysis
2022-07-04 the high-performance database engine stonedb of MySQL is compiled and run in centos7.9