我有兴趣生成一个具有结构字段偏移量的数组。
struct B
{
int pig[100];
bool donkey[100];
}
struct A
{
int ant[100];
bool cat[38];
struct B dog[78];
}
main ()
{
int offset[100+38+78] /* ant offsets + cat offsets + dog offsets */
/* How do I fill up these offset array to fill in with offsets of ant, cat, dog */
}
Output should be something like:
offset[0] = 0;
offset[1] = 4;
......
......
offset[99]= 4*99;
.......
offset[100+38+78-1] = ? ;
我知道C不支持反射,我们可以在某种程度上使用X_MACROS,但我的结构非常复杂。我想用我在这个问题中发布的基本简单结构来启动。
答案 0 :(得分:1)
您可以将数组元素的地址转换为char *
,然后减去结构的地址。
struct A a;
for (int i = 0; i < 100; i++) {
offset[i] = (char*)&a.ant[i] - (char*)&a;
}
for (int i = 0; i < 38; i++) {
offset[100 + i] = (char*)&a.cat[i] - (char*)&a;
}
for (int i = 0; i < 78; i++) {
offset[100 + 38 + i] = (char*)&a.dog[i] - (char*)&a;