歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C語言中union的含義

C語言中union的含義

日期:2017/3/1 9:50:22   编辑:Linux編程

union是一種數據類型,跟struct類型有點類似,其形式為:

union 聯合名 {

type1name1;

type2name2;

……

} 聯合變量名;

聯合表示幾個變量共用一個內存位置,在不同的時間保存不同的數據類型和不同的數據長度。當一個聯合被說明時,編譯程序自動的產生一個變量,其長度為聯合中最大的變量長度。聯合成員的訪問方法跟結構的一樣。

struct和union和區別:

1.結構和聯合都是由多個不同的數據類型成員組成的,但是在任一時刻聯合只存放一個被選中的成員,而結構的所有成員都存在。

2。對於聯合的不同成員賦值,將會對其他成員重寫,原來成員的值就不存在了,而對結構的不同成員賦值是會不影響的。

對聯合變量的賦值,都只能對變量的成員進行,一個聯合變量每次只能賦值給一個成員,一個聯合變量的值就是當前聯合變量的某一個成員值。

應該說明的是, 這裡所謂的共享不是指把多個成員同時裝入一個聯合變量內, 而是指該聯合變量可被賦予任一成員值,但每次只能賦一種值, 賦入新值則沖去舊值。

http://www.linuxidc.com/Linux/2013-11/93188.htm

  1. BOOL isBigEndian()
  2. {
  3. union
  4. {
  5. int i;
  6. char c;
  7. }test;
  8. test.c = 2;
  9. return test.i != 2;
  10. }

這裡用的是union來控制這個共享布局,有個知識點就是union裡面的成員c和i都是從低地址開始對齊的。

http://www.linuxidc.com/Linux/2013-11/93189.htm

關於匿名聯合:

匿名聯合的成員名不能與同一個作用於內的其它變量名沖突。

由於匿名聯合不使用點運算符,所以包含在匿名聯合內的元素必須是數據,不允許有成員函數,

也不能包含私有或受保護的成員,還有全局匿名聯合必須是靜態的,否則就必須放在匿名名字空間裡。

聯合裡面的成員共享內存,所以靜態、引用(由於不能共享內存)都不能用。

聯合裡面不允許存放帶有構造函數、析構函數、復制拷貝操作符等類,因為他們共享內存,編譯器無法保證這些對象不被破壞,也無法保證離開時能調用析構函數。

感覺還是沒太明白!

Copyright © Linux教程網 All Rights Reserved