有没有办法像遍历一维数组一样遍历结构体?

nodefault 2006-02-16 06:31:10

有没有办法像遍历一维数组一样遍历结构体?

比如我有一个结构体
typedef struct
{
WORD buildYears;
char addr[10];
BYTE color;
...........
}houseInfo_T;

我要用CTreeCtrl显示,我要把所有子节点都显示出来,怎么遍历每个域?
比如:
有一个结构体型的指针*pHouse,里面已经有值了。下面如何做?

for(int i=0,i<*pHouse的域总数;i++ ) //怎么得到houseInfo_T的域总数?
{
取出*pHoused的第i个域 // 怎么取*pHouse的第i个域?

}
...全文
344 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
nodefault 2006-02-20
  • 打赏
  • 举报
回复
Polarislee(北极星)理解了我的意思!

chenzhichao2008 2006-02-20
  • 打赏
  • 举报
回复
你的目的是什么?
北极猩猩 2006-02-18
  • 打赏
  • 举报
回复
楼主是想要在不了解结构定义的情况下做到这一点吗?
除非在类的定义中自己插入运行期的类型信息(就像MFC那样)
HelloIvan2005 2006-02-17
  • 打赏
  • 举报
回复
stl泛型编程,可以看看
ggw 2006-02-17
  • 打赏
  • 举报
回复
在结构中定义一个指示个数。
newcore 2006-02-16
  • 打赏
  • 举报
回复
更正一下:

memcpy(buildYears, pHouse->buildYears, sizeof(buildYeadrs)

---〉

memcpy(&buildYears, &(pHouse->buildYears), sizeof(buildYeadrs));

newcore 2006-02-16
  • 打赏
  • 举报
回复
如果没理解错的话:

for(int i=0,i<*pHouse的域总数;i++ ) //怎么得到houseInfo_T的域总数?
{
memcpy(buildYears, pHouse->buildYears, sizeof(buildYeadrs));// 怎么取*pHouse的第i个域?
}

memcpy 同理取出其他域,一个一个的取不麻烦而且,能够满足你的要求。PS:最好用memcpy,以免出现内存对齐引起的不必要的问题。
rageliu 2006-02-16
  • 打赏
  • 举报
回复
晕!!好象我也领会错了楼主的意思!!哎,智慧不行了:)郁闷
rageliu 2006-02-16
  • 打赏
  • 举报
回复
一般不推荐这样的用法,也没见到过

如果楼主一定要这样,应该还是有可寻的办法的:

1. 调整默认的内存对齐方式,为后面定位做准备

#pragma pack(push,1)//修改默认值,使用1byte对齐方式
开始结构体的定义
#pragma pack(pop)//恢复默认对齐方式

2. 这里必须记得你所为的每一个域是什么数据类型,以此来确定每一个域的偏移量
3. 根据偏移量访问每一个域

应该是可以的,不过我没时间测试,共参考
nodefault 2006-02-16
  • 打赏
  • 举报
回复
to Mackz(在相互) :

您误解我的意思了。我要遍历某个节点的每个域,而不是遍历结构体数组的元素。
菜牛 2006-02-16
  • 打赏
  • 举报
回复
(pHouse + i)->buildYears
pHouse[i].buildYears
cnwolf 2006-02-16
  • 打赏
  • 举报
回复
记得编译的时候最小对齐长度是4给字节,如果某个域长度不到4,按四个字节分配

如果是这样的话,你可以每次取四个字节,这样就可以把每个域去出来了,当然你的域不能大余四个字节

现在没有编译环境,没法给你看看(怕记错了),自己看看吧

不过结构体,好像没有你那么用的
nodefault 2006-02-16
  • 打赏
  • 举报
回复
我是楼主!
没有办法吗?只能像下面的做法一样逐个的取吗?

aaa = pHouse-> buildYears;
pomelowu 2006-02-16
  • 打赏
  • 举报
回复
没办法,只有一个域一个域的写。

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧