我不知道爲什麼你會想想這樣做,但我很好奇,如果有人知道答案。是否有可能在運行時使用一個結構定義一段時間,然後改變那個定義?是否有可能在運行時更改結構的定義?
即
typedef struct
{
int a;
int b;
}my_struct;
後來就......
typedef struct
{
int a;
int b;
int c;
}my_struct;
我不知道爲什麼你會想想這樣做,但我很好奇,如果有人知道答案。是否有可能在運行時使用一個結構定義一段時間,然後改變那個定義?是否有可能在運行時更改結構的定義?
即
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
到不同但兼容的類型,你可以訪問域以不同的方式。
請記住,兼容性很重要,您必須知道底層內存將在兩個結構之間正確對齊。
您也可以通過使用重疊內存將兩個結構放入一個聯合來實現。
這就是Objective-C的誕生...... – 2013-04-20 05:57:28
如果你正在談論運行時多態性,那麼它可以工作,但你必須知道你在做什麼。閱讀Axel Schreiner的ooc.pdf。
從字面上看,沒有。從概念?如果你對此置之不理,幾乎可以做任何事情。 – WhozCraig 2013-04-20 05:51:46
不可能!使用不同的結構或使用數組。 – johnchen902 2013-04-20 05:52:25
結構定義no,但可以適當地使用指針和類型轉換。你想實現什麼? – Rohan 2013-04-20 05:53:08