如何遍历结构中的所有项目?

时间:2012-06-14 15:32:43

标签: c struct structure

我有这种结构格式

typedef struct{
  tMY_STRUCT2 my_struct2;
  u16 item1;
  u8 item2[20];      
  u32 item3;
}tMY_STRUCT;

如何通过结构? 由于对齐,它不那么容易,我不能用 SIZEOF(item)从结构开始计算偏移量。

有什么办法吗?

原因:我需要启动大型结构,有一些条件,所以我需要在FOR循环内进行。

2 个答案:

答案 0 :(得分:5)

不要这样做。结构的要点是无法统一处理其数据项。结构是异构数据,因为数组是同质的。

在代码中一次初始化一个字段,或者将整个结构初始化为零。这些是唯一的好习惯选择。特别是对齐将取决于机器架构,编译器等。因此,如果对代码进行看似微不足道的更改,例如重新排序声明中的字段,或者在不同的操作系统上运行或在其他地方编译,则使用此方法的方法可能会中断

选项:

memset(mystruct, 0, sizeof(mystruct));

或(我认为这是C99)mystruct_t foo = {0};

或者只是初始化每个字段。

答案 1 :(得分:0)

我不太明白for循环如何帮助你...但是没有很好的方法来迭代结构。

你可以设置一个指向结构中对象的指针结构,然后通过sizeof(ptr)跳过它,但那会很糟糕,你的同事会骂你。