当前位置:网站首页>Zero length array in GNU C
Zero length array in GNU C
2022-07-05 08:05:00 【Car chezi】
List of articles
What is a zero length array (Arrays of Length Zero)
If we define a zero length array in the program , You'll find that in addition to GCC compiler , In other compiling environments, it may fail to compile or have warning messages .
Let's take a very simple example :
int buffer[0];
int main(void)
{
printf("%d\n", sizeof(buffer));
return 0;
}
You'll find that , The output is 0
in other words , The length is 0 The array of does not occupy memory space .
Use of zero length arrays
however , Zero length arrays are generally not used alone , It is often used as the last member of the structure , To form a variable length structure . Let's look at an example
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
struct line {
short len;
char contents[0];
};
int main(void)
{
const char *txt = "hello";
int my_len = strlen(txt) + 1;
struct line *my_line =
(struct line *) malloc (sizeof (struct line) + my_len);
my_line->len = my_len;
memcpy(my_line->contents, txt, my_len);
printf("%s\n",my_line->contents);
printf("sizeof struct line = %lu\n", sizeof (struct line));
printf("address struct line = %p\n", my_line);
printf("address of char contents[0] = %p\n", &my_line->contents);
}
The output is :
hello
sizeof struct line = 2
address struct line = 0x8c8010
address of char contents[0] = 0x8c8012
Be careful :
- struct line Its size is 2 Bytes , Description zero length array contents It really doesn't take up space
- contents The starting address of the array is short len Behind ; The reason is that the type of array is char, If change to int , So in short len There is filling behind
- We can use structural members contents Access memory ( Code 17-18 That's ok ).contents It's like a label , Represents an address constant
- malloc Only called once ( The first 15 That's ok )
With this example , The advantage of zero length arrays is , You can give it as needed struct line Allocate space ,
struct line *my_line = (struct line *) malloc (sizeof (struct line) + my_len);
How much do you want , Just add how much .
The difference between zero length array and pointer
Some people say , It can also be achieved with pointers . such as
struct line {
short len;
void *contents;
};
There is a difference :
- void *contents It's a variable , It takes up memory
- In use ,contents Point to another piece of memory , That is to say, it will be called again malloc
- contents Point to memory and struct line The memory occupied is usually discontinuous
therefore , The advantage of zero length array is reflected .
Define what type of zero length array
Some people think that , The zero length array at the end of the structure should be char type , The advantage is to save space , There is no need to fill in front of it . It's not , The specific type depends on the application .
such as Linux There is a structure in the kernel ——USB request block
struct urb {
struct kref kref;
void *hcpriv;
atomic_t use_count;
atomic_t reject;
int unlinked;
...
int error_count;
void *context;
usb_complete_t complete;
struct usb_iso_packet_descriptor iso_frame_desc[0];
};
11: The zero length array it uses is struct usb_iso_packet_descriptor type , instead of char type .
Reference material
The embedded C Language self-cultivation 05: Zero length array - You know
边栏推荐
- Pointnet++ classification practice
- [trio basic tutorial 17 from getting started to mastering] set up and connect the trio motion controller and input the activation code
- Sql Server的存儲過程詳解
- Semiconductor devices (I) PN junction
- [trio basic from introduction to mastery tutorial 20] trio calculates the arc center and radius through three points of spatial arc
- Markdown tips
- The research found that the cross-border e-commerce customer service system has these five functions!
- The browser cannot access Baidu
- [popular science] some interesting things that I don't know whether they are useful or not
- solver. Learning notes of prototxt file parameters
猜你喜欢

Factors affecting the quality of slip rings in production
![[trio basic tutorial 16 from introduction to proficiency] UDP communication test supplement](/img/54/78e4e10724b2762274b06debb10877.jpg)
[trio basic tutorial 16 from introduction to proficiency] UDP communication test supplement

Hardware and software solution of FPGA key chattering elimination

Communication standard -- communication protocol

C language # and #

Programming knowledge -- basis of C language
![Shape template matching based on Halcon learning [VII] reuse_ model. Hdev routine](/img/55/0f05291755dc1c3c03db8e991a1ba1.jpg)
Shape template matching based on Halcon learning [VII] reuse_ model. Hdev routine

找不到实时聊天软件?给你推荐电商企业都在用的!

C#,数值计算(Numerical Recipes in C#),线性代数方程的求解,LU分解(LU Decomposition)源程序

Hardware 1 -- relationship between gain and magnification
随机推荐
Global and Chinese markets for recycled boilers 2022-2028: Research Report on technology, participants, trends, market size and share
Basic embedded concepts
Can't find real-time chat software? Recommend to you what e-commerce enterprises are using!
Volatile of C language
Design a clock frequency division circuit that can be switched arbitrarily
1089 insert or merge, including test point 5
How to excavate and research ideas from the paper
Cadence simulation encountered "input.scs": can not open input file change path problem
Correlation based template matching based on Halcon learning [II] find_ ncc_ model_ defocused_ precision. hdev
[trio basic from introduction to mastery tutorial XIV] trio realizes unit axis multi-color code capture
Markdown tips
Live555 push RTSP audio and video stream summary (I) cross compilation
Factors affecting the quality of slip rings in production
如何将EasyCVR平台RTSP接入的设备数据迁移到EasyNVR中?
Carrier period, electrical speed, carrier period variation
研究发现,跨境电商客服系统都有这五点功能!
Soem EtherCAT source code analysis II (list of known configuration information)
MLPerf Training v2.0 榜单发布,在同等GPU配置下百度飞桨性能世界第一
[popular science] some interesting things that I don't know whether they are useful or not
Makefile application