我有關於結構的C.行爲的問題您可以使用指向包含結構的指針來修改嵌套結構的值嗎?
以給定的結構爲例:
typedef struct {
char num1;
char num2;
} structa;
typedef struct {
structa innerstruct;
char num3;
char num4;
} structb;
我假設,因爲structb包含structa場,而不是指向一個,那structb將被佈置在內存中:
struct {
char num1; //innerstruct num1
char num2; //innerstruct num2
char num3; //num3
char num4; //num4
};
如果是這樣,你能訪問每個字段嗎?
*(((char *)&structbvar) + 0) = 1; //innerstruct num1
*(((char *)&structbvar) + 1) = 2; //innerstruct num2
*(((char *)&structbvar) + 2) = 3; //num3
*(((char *)&structbvar) + 3) = 4; //num4
還是像這樣訪問它們?
((structa)structbvar).num1 = 1; //innerstruct num1
((structa)structbvar).num2 = 2; //innerstruct num2
無論這是否是不好的做法或不。
也是可靠/便攜嗎?
編輯,由馬特·麥克納布指出,你不能直接澆鑄結構,所以應該是:
((structa *)&structbvar)->num1 = 1; //innerstruct num1
((structa *)&structbvar)->num2 = 2; //innerstruct num2
你可以試試它,你通常會擺脫它,但沒有定義它必須工作。不要這樣做;它會讓你的代碼超出理由而變得模糊。 – 2015-04-05 04:28:25
我已經厭倦了我的系統,它似乎工作。事情是,但我不確定它是否便攜,如果不是,爲什麼不。我並不擔心這是否是不好的做法,但我已經知道它確實是這樣,我不會編寫這樣的代碼,但知道C如何蜱是很好的。 – LivePastTheEnd 2015-04-05 04:28:46
你必須確保你的結構是對齊的 – 2015-04-05 04:57:57