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