是否可以在运行时更改结构的定义?

时间:2013-04-20 05:50:47

标签: c struct runtime

我不知道为什么你会希望这样做,但我很好奇是否有人知道答案。是否可以在运行时使用一个结构定义一段时间,然后更改该定义?

typedef struct
{
    int a;
    int b;
}my_struct;

以后......

typedef struct
{
    int a;
    int b;
    int c;
}my_struct;

2 个答案:

答案 0 :(得分:3)

不,您无法更改给定类型的定义,但将其转换为完全不同的类型没有任何问题,假设基础数据的布局相似且兼容。< / p>

例如,考虑:

struct s_xyzzy {
    int a;
    int b;
};

struct s_plugh {
    int a;
    char b0;
    char b1;
    char b2;
    char b3;
};

struct s_xyzzy *xyzzy = malloc (sizeof (*xyzzy));
((struct s_plugh *)xyzzy)->b0 = 'x';

通过将xyzzy转换为其他但兼容的类型,您可以以不同的方式访问这些字段。

请记住,兼容性很重要,您必须知道底层内存将在两个结构之间正确对齐。

您也可以使用重叠的内存将两个结构放入联合中。

答案 1 :(得分:2)

如果您正在讨论运行时多态性,那么可以使其工作,但您必须知道自己在做什么。阅读Axel Schreiner的ooc.pdf