长度为0的数组的使用技巧

在看一些别人的代码的时候, 常常会看到长度为0的数组。到此可能会有不解, 为什么会有这种设计, 以及如何用。 

 

看了别人的博客的时候 ,我大概明白了其中的含义:

在标准CC++0长数组如charArray[0]是不允许使用的,因为这从语义逻辑上看,是完全没有意义的。

但是,GUN中却允许使用,而且,很多时候,应用在了变长结构体中,如:

StructPacket

{

Int len;

Char cData[0]; //这里的0长结构体就为变长结构体提供了非常好的支持

};

 

首先对0长数组做一个解释:

用途 :长度为0的数组的主要用途是为了满足需要变长度的结构体。

用法 :在一个结构体的最后 ,申明一个长度为0的数组,就可以使得这个结构体是可变长的。对于编译器来说,此时长度为0的数组并不占用空间,因为数组名本身不占空间,它只是一个偏移量, 数组名这个符号本身代 表了一个不可修改的地址常量 (注意:数组名永远都不会是指针! ),但对于这个数组的大小,我们可以进行动态分配

 

从上面的结果可以看出:

l 长度为的数组并不占有内存空间,而指针方式需要占用内存空间。

l 对于长度为数组,在申请内存空间时,采用一次性分配的原则进行;对于包含指针的结构体,才申请空间时需分别进行,释放时也需分别释放。

l 对于长度为的数组的访问可采用数组方式进行。

 

 

posted @ 2012-07-31 15:22  nosaferyao  阅读(441)  评论(0编辑  收藏  举报