2013-04-20 75 views
-1

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

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

后来就......

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

从字面上看,没有。从概念?如果你对此置之不理,几乎可以做任何事情。 – WhozCraig 2013-04-20 05:51:46

+0

不可能!使用不同的结构或使用数组。 – johnchen902 2013-04-20 05:52:25

+0

结构定义no,但可以适当地使用指针和类型转换。你想实现什么? – Rohan 2013-04-20 05:53:08

回答

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到不同但兼容的类型,你可以访问域以不同的方式。

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

您也可以通过使用重叠内存将两个结构放入一个联合来实现。

+0

这就是Objective-C的诞生...... – 2013-04-20 05:57:28

2

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

相关问题