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

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

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

后来……

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

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

例如,考虑:

 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转换为不同但兼容的类型,您可以以不同的方式访问字段。

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

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

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