博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
变长结构体的几种方法
阅读量:3975 次
发布时间:2019-05-24

本文共 527 字,大约阅读时间需要 1 分钟。

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

 

一、定义变长数组

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

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

转载地址:http://pneki.baihongyu.com/

你可能感兴趣的文章
confmgr项目,django,dwz相关问题
查看>>
linux文件共享
查看>>
linux下tar.gz、tar、bz2、zip等解压缩、压缩命令小结(tar包解压)
查看>>
vi和vim区别
查看>>
程序员经典语录
查看>>
Django性能优化
查看>>
python模块学习 ---- smtplib 邮件发送
查看>>
Python模块学习 ---- subprocess 创建子进程
查看>>
python求时间差
查看>>
Python网页抓取urllib,urllib2,httplib[2]
查看>>
Python urllib2递归抓取某个网站下图片
查看>>
JS清空多文本框|文本域
查看>>
linux常用命令(操作命令)
查看>>
Linux一些经典书籍
查看>>
apache启动报错(98)Address already in use: make_sock: could not bind to address [::]:80
查看>>
linux kill用法、killall、pkill、xkill
查看>>
Python笔记——几种数据结构的实现:栈、队列及二叉树
查看>>
Python笔记——排序算法的实现
查看>>
jQuery数据显示插件整合实现代码
查看>>
python时区设置——pytz模块
查看>>