中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言關鍵字union怎么用

發布時間:2021-02-08 14:22:46 來源:億速云 閱讀:142 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關C語言關鍵字union怎么用,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

union,中文名“聯合體、共用體”,在某種程度上類似結構體struct的一種數據結構,共用體(union)和結構體(struct)同樣可以包含很多種數據類型和變量。

但在“聯合”中, 各成員共享一段內存空間, 一個聯合變量的長度等于各成員中最長的長度 。一個聯合體類型必須經過定義之后, 才能使用它,才能把一個變量聲明定義為該聯合體類型。

當定義結構對象時,如果沒有顯式地初始化它們,則會采用一般初始化規則:如果該結構對象屬于動態存儲類型,那么其成員具有不確定的初始值。

另一方面,如果結構對象具有靜態存儲周期,那么其非指針成員初始值是 0,其指針成員初始值是空指針。

不同于結構成員——它們在結構中都具有單獨的內存位置,聯合成員則共享同一個內存位置。也就是說,聯合中的所有成員都是從相同的內存地址開始。因此,可以定義一個擁有許多成員的聯合,但是同一時刻只能有一個成員允許含有一個值。聯合讓程序員可以方便地通過不同方式使用同一個內存位置。

一、定義聯合(union)

聯合的定義方式與結構是一樣的,只是把關鍵字 struct 改成 union:

union [標簽名稱]{成員聲明列表};

下面的例子定義了一個名為Data的聯合類型,它有 3 個成員:i、x 和 str:

union Data { int i;double x;char str [16];};

這種類型的對象可以存儲一個整數、一個浮點數或一個短字符串。

例如:

union StateMachine

{

  char character;

  int number;

  char *str;

  double exp;

};

一個union 只配置一個足夠大的空間以來容納最大長度的數據成員,以上例而言,最大長度是double 型態,所以StateMachine 的空間大小就是double 數據類型的大小。

在C++里,union 的成員默認屬性頁為public。union 主要用來壓縮空間。如果一些數據不可能在同一時間同時被用到,則可以使用union。

二、初始化聯合(union)

與結構類似,通過初始化列表(initialization list)來初始化聯合對象。但是,對聯合來說,列表只有一個初始化器(initializer)。

與結構一樣,C99 允許在初始化器中使用成員指示符來指示哪個成員被初始化。而且,如果初始化器沒有成員指示符,那么就與聯合內的第一個成員關聯。具有自動存儲類的聯合對象也可以使用已有的同類型對象來初始化。下面是一些初始化例子:

union Data var1={77},

var2={.str="Mary"},

var3=var1,

myData[100]={{.x=0.5},{1},var2};

數組 myData 中的元素如果沒有指定初始化器,會被隱式地初始化為 0 值。

三、聯合體變量的聲明

聯合變量的說明和結構變量的聲明方式相同, 也有三種形式:

 第一種 , 先定義聯合體類型,再聲明聯合體變量 ;

 第二種 ,定義聯合體類型的同時聲明聯合體變量;

 第三種 ,直接聲明聯合體(以匿名的形式定義聯合體類型)。

以perdata類型為例,說明如下:

第一種, 先定義聯合體類型,再聲明聯合體變量

union  perdata

{

  int class;

  char officae[10];

};

union  perdata a,b; /*說明a,b為perdata類型*/

第二種, 定義聯合體類型的同時聲明聯合體變量:

union perdata

{

int class;

char office[10];

} a , b ;

第三種, 直接聲明聯合體(以匿名的形式定義聯合體類型):

union

{

int class;

char office[10];

}a,b

經說明后的a,b變量均為perdata類型。a,b變量的長度應等于 perdata 的成員中最長的長度, 即等于office數組的長度,共10個字節。對a,b變量如賦予整型值時,只使用了2個字節,而賦予字符數組時,可用10個字節。

四、聯合體變量的賦值和使用

對聯合體變量的賦值,使用都只能是對變量的成員進行。

聯合變量的成員表示為:  聯合變量名 . 成員名 

例如,a被說明為perdata類型的變量之后,可使用 a.class,a.office

不允許只用聯合變量名作賦值或其它操作。 也不允許對聯合變量作初始化賦值,賦值只能在程序中進行。

一個聯合體變量, 每次只能賦予一個成員值。一個聯合變量的值就是聯合變員的某一個成員值。

五、struct和union和區別

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

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

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

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

關于“C語言關鍵字union怎么用”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

江阴市| 阜城县| 景东| 高平市| 青冈县| 哈密市| 乡宁县| 拉萨市| 柳江县| 安吉县| 临沧市| 农安县| 谢通门县| 元朗区| 漯河市| 道真| 锦州市| 南召县| 登封市| 澎湖县| 光泽县| 婺源县| 柳州市| 平邑县| 高雄市| 资中县| 临朐县| 宁陕县| 平江县| 兰考县| 西乌珠穆沁旗| 桐庐县| 长宁区| 洛隆县| 桓台县| 阜新| 靖西县| 承德市| 开平市| 马公市| 射阳县|