弹性数组存在于形如下面的结构体:
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标准之后,就开始支持这种弹性数组