结构体/类中的弹性数组---元素个数为0的数组

弹性数组存在于形如下面的结构体:

 

class CZeroTest
{
public:
	int nCnt;
	int items[];
};


CZeroTest中的 int items[]即为该类的弹性数组,也可定义为 int items[0],可以发现sizeof(CZeroTest)为4,即弹性数组的大小为0,不占用空间。

 

之所以称为弹性数组,是因为给该类型的指针可以通过malloc或者new的方式给其数组分配一定的空间,如:

 

CZeroTest *ztOb;
ztOb = (CZeroTest *)malloc(sizeof(CZeroTest) + 50 * sizeof(int));   //C语言方式
ztOb = (CZeroTest *)new char(sizeof(CZeroTest) + 50 * sizeof(int)); //C++语言方式

 

 


上面代码则给ztOb对象中的弹性数组分配了50个int型空间的大小。items的空间地址在nCnt空间地址的后面。

 

弹性数组的释放:

 

free(ztOb);    //C语言方式
delete []ztOb; //C++语言方式


从C99标准之后,就开始支持这种弹性数组

 


 

posted @ 2013-08-30 18:56  pangbangb  阅读(618)  评论(0编辑  收藏  举报