C语言中长度为0的数组

本文探讨了C语言中长度为0的数组特性,虽然在某些编译器下不被允许,但GCC可以接受。0长度数组常用于动态buffer管理,通过一次内存分配实现结构体和缓冲区的连续存储,简化管理和释放过程,节省空间并避免额外初始化。对比使用指针的方式,0长度数组提供了一种简洁高效的选择。
摘要由CSDN通过智能技术生成
    今这里写代码片天在看android系统源码时发现一个很有趣的结构体,以前从来没发现数组的长度可以为0,既然碰见这种情况,就好好分析一下。

如下结构体:

struct example 
{
int length;
char name[0];
};

原来,长度为0的数组在标准c和c++中是不允许的,使用VC编译器是编译不过的,它会提示数组长度不能为0。但在GCC编译器中是可以编译通过的,它的最典型的用法就是位于数组中的最后一项,这样做主要是为了方便内存缓冲区的管理。
通过查看gcc手册了解到,可以采用如下方式对其申请内存空间:

struct example myExample = (struct example )malloc (sizeof (struct example) + this_length);
myExample->length= this_length;

这样的写法最适合制作动态buffer,直接就把buffer的结构体和缓冲区一块分配了。用起来也非常方便,为什么要使用长度为0的数组呢?它有什么好处?
如果你将上面的长度为0的数组换成指针,那么在分配内存时,需采用两步:首先,需为结构体分配一块内存空间;其次再为结构体中的指针分配内存空间,一般使用malloc函数动态分配内存空间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值