当前位置:网站首页>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
边栏推荐
- Altium designer 19.1.18 - Import frame
- Solutions to compilation warnings in Quartus II
- Carrier period, electrical speed, carrier period variation
- How to select conductive slip ring
- Correlation based template matching based on Halcon learning [II] find_ ncc_ model_ defocused_ precision. hdev
- How to migrate the device data accessed by the RTSP of the easycvr platform to easynvr?
- Shape template matching based on Halcon learning [vi] find_ mirror_ dies. Hdev routine
- [trio basic from introduction to mastery tutorial 20] trio calculates the arc center and radius through three points of spatial arc
- Measurement fitting based on Halcon learning [i] fuse Hdev routine
- solver. Learning notes of prototxt file parameters
猜你喜欢
![[trio basic from introduction to mastery tutorial XIV] trio realizes unit axis multi-color code capture](/img/c5/22c6148873508b9205972e1ad970a3.jpg)
[trio basic from introduction to mastery tutorial XIV] trio realizes unit axis multi-color code capture
![Shape template matching based on Halcon learning [vi] find_ mirror_ dies. Hdev routine](/img/99/21c228ff5de46c4a42b60f989b10e8.jpg)
Shape template matching based on Halcon learning [vi] find_ mirror_ dies. Hdev routine

Hardware and software solution of FPGA key chattering elimination

Can't find real-time chat software? Recommend to you what e-commerce enterprises are using!

Altium designer 19.1.18 - hide the fly line of a network

Matlab2018b problem solving when installing embedded coder support package for stmicroelectronic

Altium designer 19.1.18 - clear information generated by measuring distance
![[tutorial 15 of trio basic from introduction to proficiency] trio free serial communication](/img/08/7f28008a4aa999650998ba8dee5d8e.jpg)
[tutorial 15 of trio basic from introduction to proficiency] trio free serial communication
![[trio basic tutorial 18 from introduction to proficiency] trio motion controller UDP fast exchange data communication](/img/05/0f63e4cd3da24e5b956ec5899b939d.jpg)
[trio basic tutorial 18 from introduction to proficiency] trio motion controller UDP fast exchange data communication

Markdown tips
随机推荐
Ten thousand words detailed eight sorting must read (code + dynamic diagram demonstration)
Soem EtherCAT source code analysis attachment 1 (establishment of communication operation environment)
Global and Chinese market of core pallets 2022-2028: Research Report on technology, participants, trends, market size and share
. Net service governance flow limiting middleware -fireflysoft RateLimit
Measurement fitting based on Halcon learning [III] PM_ measure_ board. Hdev routine
A simple method to prove 1/t Fourier transform
My-basic application 2: my-basic installation and operation
How to migrate the device data accessed by the RTSP of the easycvr platform to easynvr?
Win10 shortcut key
Altium designer learning (I)
[professional literacy] specific direction of analog integrated circuits
Live555 push RTSP audio and video stream summary (III) flower screen problem caused by pushing H264 real-time stream
Vofa+ software usage record
Wifi-802.11 negotiation rate table
Makefile application
C WinForm [exit application] - practice 3
如何进行导电滑环选型
IEEE access personal contribution experience record
Sql Server的存储过程详解
UEFI development learning 4 - getting to know variable services