变长结构体的几种方法

定义结构体时,往往其成员中含有变长的元素,可用以下方法解决

 

一、定义变长数组

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); }
};

结构体最后一个成员为指针函数,返回紧挨着结构体的第一个指针,只要申请的内存足够且连续,则均可用此法访问

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值