擱淺的掃雷艦需要副業[Sei]
@gensei
想
Wed, Oct 12, 2022 3:04 AM
C++
使用union會自動往前做對齊嗎???
function內外實體物件大小一樣,但short後的array起始位址硬是往後跳了2個byte
史萊姆流星
@slimemeteor
Wed, Oct 12, 2022 3:57 AM
那要看你 union 怎樣宣告呀
擱淺的掃雷艦需要副業[Sei]
@gensei
說
Wed, Oct 12, 2022 5:07 AM
struct strA {
short val_1;
union {
char chval_2[8];
long long val_2;
};
}
擱淺的掃雷艦需要副業[Sei]
@gensei
說
Wed, Oct 12, 2022 5:10 AM
印出的strA的位址和大小都沒變,但chval_2有用union比沒用的起始位址多了2byte
史萊姆流星
@slimemeteor
Wed, Oct 12, 2022 6:27 AM
union 的定義不就是「共用」嗎?
所以那塊記憶體會取「最大」的值
擱淺的掃雷艦需要副業[Sei]
@gensei
說
Wed, Oct 12, 2022 6:41 AM
不是,我說的是chval_2起始位址,short val_1並不在union裡
史萊姆流星
@slimemeteor
Wed, Oct 12, 2022 7:04 AM
chval_2 跟 val_2 共用一塊記憶體
所以會取最大值這樣
你想看差異的話,可以試試看
後面的long 改成 int64 看看差異
擱淺的掃雷艦需要副業[Sei]
@gensei
說
Wed, Oct 12, 2022 7:26 AM
我說不是共用最大值多少,是起始位址...
擱淺的掃雷艦需要副業[Sei]
@gensei
說
Wed, Oct 12, 2022 7:28 AM
位址印出來,沒用union的
strA:0x3210
strA.val_1:0x3210
strA.cval_2: 0x3212 ← &strA丟進有用union的function後變成0x3214
載入新的回覆
function內外實體物件大小一樣,但short後的array起始位址硬是往後跳了2個byte
short val_1;
union {
char chval_2[8];
long long val_2;
};
}
所以那塊記憶體會取「最大」的值
所以會取最大值這樣
你想看差異的話,可以試試看
後面的long 改成 int64 看看差異
strA:0x3210
strA.val_1:0x3210
strA.cval_2: 0x3212 ← &strA丟進有用union的function後變成0x3214