结构体/类中的弹性数组---元素个数为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标准之后,就开始支持这种弹性数组


原文地址:https://www.cnblogs.com/pangblog/p/3292223.html