2013-04-20 79 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

相關問題