0

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

IE

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

后来……

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

2 回答 2

3

不,您不能更改给定类型的定义,但是将其转换为完全不同的类型并没有错,假设基础数据的布局相似并且在其他方​​面兼容。

例如,考虑:

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

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

您也可以通过使用重叠内存将两个结构放入一个联合中来做到这一点。

于 2013-04-20T05:55:03.113 回答
2

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

于 2013-04-20T05:58:37.793 回答