在C中,我希望能够在结构中标记特定位置。例如:
struct test {
char name[20];
position:
int x;
int y;
};
这样我就可以做到:
struct test srs[2];
memcpy(&srs[1].position, &srs[0].position, sizeof(test) - offsetof(test, position));
将srs [0]的位置复制为srs [1]。
我已经尝试将位置声明为没有任何字节的类型但是这不起作用:
struct test {
char name[20];
void position; //unsigned position: 0; doesn't work either
int x;
int y;
};
我知道我可以将x和y嵌入另一个名为position的结构中:
struct test {
char name[20];
struct {
int x;
int y;
} position;
};
或者只使用x属性的位置:
struct test srs[2];
memcpy(&srs[1].x, &srs[0].x, sizeof(test) - offsetof(test, x));
但是我想知道是否有办法做我最初提出的建议。
答案 0 :(得分:8)
struct test {
char name[20];
char position[0];
int x;
int y;
};
0长度数组在网络协议代码中非常流行。
答案 1 :(得分:4)
使用C11匿名联合和匿名结构的另一种解决方案:
struct test {
char name[20];
union {
int position;
struct {
int x;
int y;
};
};
};
position
的地址是name
成员之后的下一个结构成员的地址。
我只是为了显示它而展示它,因为自然解决方案是在你问题的第一个结构声明中只取成员x
的地址。