关于零长数组

本文深入探讨了C/C++语言中零长数组的特性、用途及其实现细节,包括如何在结构体中使用零长数组、其在内存分配上的独特之处,以及标准C/C++对此的支持情况。同时,文章还强调了GCC编译器对零长数组的扩展支持,并提供了实际应用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

typedef struct {

         int head;  

         int size; 

         char reply;

        char data[0];

} packet;

这里的char data[0] 即为零长数组;其不占用任何空间,甚至是一个指针的空间都不占;其主要是作为扩展数组用的,我们可以这样使用它,

packet*  cmd =( packet)malloc (sizeof(packet) + 20);

memcpy (packet->data, some_data, 20);

 

总结:在某一结构末尾如定义类似 char bytes[0] 的零长数组,表示该结构不定长,可通过数组的方式进行扩展。结构中必包含一个长度信息。结构本身类似于一个信息头。同时,此结构只能通过堆方式分配内存。

注:在标准 C 或者 C++ 中由于不支持 0 长度的数组,所以 int array[0]; 这样的定义是非法的。不过有些编译器(如GCC)的扩展功能支持 0 长度的数组。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值