今这里写代码片天在看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函数动态分配内存空间