结构标签

时间:2014-08-08 20:11:44

标签: c struct label

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

但是我想知道是否有办法做我最初提出的建议。

2 个答案:

答案 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的地址。