当前位置:网站首页>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
边栏推荐
- 动力电池UL2580测试项目包括哪些
- OLED 0.96 inch test
- Network communication model -- Network OSI tcp/ip layering
- Wifi-802.11 negotiation rate table
- Global and Chinese markets for recycled boilers 2022-2028: Research Report on technology, participants, trends, market size and share
- Baiwen 7-day smart home learning experience of Internet of things
- UEFI development learning 3 - create UEFI program
- [trio basic from introduction to mastery tutorial 20] trio calculates the arc center and radius through three points of spatial arc
- . Net service governance flow limiting middleware -fireflysoft RateLimit
- Fundamentals of C language
猜你喜欢
Correlation based template matching based on Halcon learning [II] find_ ncc_ model_ defocused_ precision. hdev
Volatile of C language
Network port usage
[tutorial 19 of trio basic from introduction to proficiency] detailed introduction of trio as a slave station connecting to the third-party bus (anybus PROFIBUS DP...)
Ten thousand words detailed eight sorting must read (code + dynamic diagram demonstration)
Basic embedded concepts
Shape template matching based on Halcon learning [v] find_ cocoa_ packages_ max_ deformation. Hdev routine
STM32 tutorial triple ADC interleaved sampling
Programming knowledge -- basis of C language
C WinForm [help interface - send email] - practice five
随机推荐
Live555 RTSP audio and video streaming summary (II) modify RTSP server streaming URL address
Altium designer 19.1.18 - change the transparency of copper laying
Detailed explanation of pragma usage
String judgment
Global and Chinese market of resistivity meter 2022-2028: Research Report on technology, participants, trends, market size and share
Some tips for using source insight (solve the problem of selecting all)
C WinForm [change the position of the form after running] - Practical Exercise 4
生产中影响滑环质量的因素
[professional literacy] specific direction of analog integrated circuits
Interview catalogue
Cadence learning records
L'étude a révélé que le système de service à la clientèle du commerce électronique transfrontalier a ces cinq fonctions!
. Net service governance flow limiting middleware -fireflysoft RateLimit
Semiconductor devices (I) PN junction
Bluetooth hc-05 pairing process and precautions
Network communication process
After installing the new version of keil5 or upgrading the JLINK firmware, you will always be prompted about the firmware update
Live555 push RTSP audio and video stream summary (I) cross compilation
Record the visual shock of the Winter Olympics and the introduction of the screen 2
Count and sort the occurrence times of specific fields through SQL statements