是否可以在运行时更改结构的定义?
我不知道为什么你会想要这样做,但我很好奇是否有人知道答案。 是否有可能在运行时使用一个结构定义一段时间,然后更改该定义?
即
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 。