全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1648
推到 Plurk!
推到 Facebook!

union & struct

答題得分者是:ikk
alvinken
初階會員


發表:21
回覆:32
積分:45
註冊:2008-06-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-02-25 14:06:46 IP:218.170.xxx.xxx 未訂閱
union 跟 struct 的最大不同點就是 所有成員共用 記憶體,而且ㄧ次只存一個成員的data
最近看到一個別人寫的函式裡的程式,不同的struct 成員的值可以同時存在
只有後存的值
個人倍感疑惑


[code cpp]
class T
{
union{
struct{
char c1
char c2
char c3
char c4
char c5
char c6
};
struct{
short s1
short s2
short s3
};
struct{
long l1
};
};
};


[/code]
------
水至清則無魚,人至賤則無敵。
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-02-25 15:04:50 IP:163.28.xxx.xxx 訂閱
應該是說用的是同一塊記憶體...
而此union所使用的記憶體大小, 取使用最大記憶體的struct來記算.
------
FPGA驗證, FPGA開發平台, http://smims.com
alvinken
初階會員


發表:21
回覆:32
積分:45
註冊:2008-06-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-02-25 15:36:50 IP:218.170.xxx.xxx 未訂閱
恩...我的想法也是如此
只是不太了解 怎同時存在 不同struct 的兩個成員的值
我個人想法應該會只有一個

我也宣告一個類似的union, 但卻沒相同的效果
所以很疑惑

------
水至清則無魚,人至賤則無敵。
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-02-25 15:58:32 IP:163.28.xxx.xxx 訂閱
是可以同時存在的...
只不過是存取同一記憶體位置, 以你提供的例子來說

[code cpp]
class T
{
public:
union{
struct{
unsigned char c1;
unsigned char c2;
unsigned char c3;
unsigned char c4;
unsigned char c5;
unsigned char c6;
}TUStructc;
struct{
unsigned short s1;
unsigned short s2;
unsigned short s3;
unsigned short s4;
unsigned short s5;
}TUStructs;
struct{
long l1;
}TUStructl;
}TUnion;
};
[/code]

以下為應用範例


[code cpp]
T tTest;
tTest.TUnion.TUStructc.c1 = 0xFF;
tTest.TUnion.TUStructc.c2 = 0xe0;
tTest.TUnion.TUStructc.c3 = 0x78;
tTest.TUnion.TUStructc.c4 = 0x56;

tTest.TUnion.TUStructs.s1 為 0xe0ff
tTest.TUnion.TUStructs.s1 為 0x5678
[/code]


------
FPGA驗證, FPGA開發平台, http://smims.com
系統時間:2024-04-27 7:50:32
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!