定义结构体时,往往其成员中含有变长的元素,可用以下方法解决
一、定义变长数组
struct CToolBarData
{
WORD wVersion; //版本号 ==1
WORD wWidth;
WORD wHeight;
WORD wItemCount; //给出后面有几项
WORD aItems[1];
}abc;
将结构体最后一个元素定义为含有一个元素的数组,倒数第二个成员定义其数组含有几个元素
这样只要申请(sizeof(struct CToolBarData)+(wItemCount-1)*sizeof(WORD ))字节的连续内存,
访问abc.aItems[n],其中n的取值范围为0~wItemCount-1,均是合法的
二、定义函数
struct CToolBarData
{
WORD wVersion; //版本号 ==1
WORD wWidth;
WORD wHeight;
WORD wItemCount; //给出后面有几项
WORD* items()
{ return (WORD*)(this+1); }
};
结构体最后一个成员为指针函数,返回紧挨着结构体的第一个指针,只要申请的内存足够且连续,则均可用此法访问