日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

联合体(union)和结构体(struct)的区别

發布時間:2023/12/10 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 联合体(union)和结构体(struct)的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.?聯合說明和聯合變量定義?

聯合也是一種新的數據類型,?它是一種特殊形式的變量。?
聯合說明和聯合變量定義與結構十分相似。其形式為:?
union?聯合名{?
數據類型?成員名;?
數據類型?成員名;?
...?
}?聯合變量名;
?

聯合表示幾個變量公用一個內存位置,?在不同的時間保存不同的數據類型?和不同長度的變量。?
下例表示說明一個聯合a_bc:?
union?a_bc{?
int?i;?
char?mm;?
};?

再用已說明的聯合可定義聯合變量。?
例如用上面說明的聯合定義一個名為lgc的聯合變量,?可寫成:?
union?a_bc?lgc;?
在聯合變量lgc中,?整型量i和字符mm公用同一內存位置。?
當一個聯合被說明時,?編譯程序自動地產生一個變量,?其長度為聯合中最大的變量長度。?

聯合訪問其成員的方法與結構相同。同樣聯合變量也可以定義成數組或指針,但定義為指針時,?也要用" ->;"符號,?此時聯合訪問成員可表示成:?
聯合名->成員名?

另外,?聯合既可以出現在結構內,?它的成員也可以是結構。?
例如:?
struct{?
int?age;?
char?*addr;?
union{?
int?i;?
char?*ch;?
}x;?
}y[10];?

若要訪問結構變量y[1]中聯合x的成員i,?可以寫成:?
y[1].x.i;?
若要訪問結構變量y[2]中聯合x的字符串指針ch的第一個字符可寫成:?
*y[2].x.ch;?
若寫成"y[2].x.*ch;"是錯誤的。?

2.?結構和聯合的區別?
結構和聯合有下列區別:?
1) 結構和聯合都是由多個不同的數據類型成員組成,?但在任何同一時刻,? 聯合轉只存放了一個被選中的成員,?而 結構的所有成員都存在。?
2) 對于聯合的不同成員賦值,?將會對其它成員重寫,?? 原來成員的值就不存在了,? 而對于結構的不同成員賦值是互不影響的。?
下面舉一個例了來加對深聯合的理解。?

main()?
{?
union{???????????????????/*定義一個聯合*/?
int?i;?
struct{?????????????/*在聯合中定義一個結構*/?
char?first;?
char?second;?
}half;?
}number;?

number.i=0x4241;?????????/*聯合成員賦值*/?
printf("%c%c\n",?number.half.first,?mumber.half.second);?
number.half.first='a';???/*聯合中結構成員賦值*/?
number.half.second='b';?
printf("%x\n",?number.i);?
getch();?
}?
輸出結果為:?
AB?
6261?

從上例結果可以看出:?當給i賦值后,?其低八位也就是first和second的值;當給first和second賦字符后,?這兩個字符的ASCII碼也將作為i?的低八位和高八位。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的联合体(union)和结构体(struct)的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。