我不知道为什么你会希望这样做,但我很好奇是否有人知道答案。是否可以在运行时使用一个结构定义一段时间,然后更改该定义?
即
typedef struct
{
int a;
int b;
}my_struct;
以后......
typedef struct
{
int a;
int b;
int c;
}my_struct;
答案 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。