回覆列表
  • 1 # 匠工加工

    c語言中的union 是聯合體,就是一個多個變數的結構同時使用一塊記憶體區域,區域的取值大小為該結構中長度最大的變數的值

    聯合的定義定義一個聯合型別的一般形式為:

    union 聯合名 { 成員表 };成員表中含有若干成員,成員的一般形式為: 型別說明符 成員名 成員名的命名應符合識別符號的規定。例如: union perdata{ int class; char office;};定義了一個名為perdata的聯合型別,它含有兩個成員,一個為整型,成員名為class;另一個為字元陣列,陣列名為office。聯合定義之後,即可進行聯合變數說明,被說明為perdata型別的變數,可以存放整型量class或存放字元陣列office。

    聯合變數的說明聯合變數的說明和結構變數的說明方式相同, 也有三種形式。即先定義,再說明;定義同時說明和直接說明。以perdata型別為例,說明如下: union perdata{ int class; char officae;};union perdata a,b;或者可同時說明為: union perdata{ int class;char office; }a,b;或直接說明為: union{ int class;char office; }a,b 經說明後的a,b變數均為perdata型別。 a,b變數的長度應等於 perdata 的成員中最長的長度, 即等於office陣列的長度,共10個位元組。從圖中可見,a,b變數如賦予整型值時,只使用了2個位元組,而賦予字元陣列時,可用10個位元組。

    聯合變數的賦值和使用對聯合變數的賦值,使用都只能是對變數的成員進行。 聯合變數的成員表示為: 聯合變數名.成員名 例如,a被說明為perdata型別的變數之後,可使用 a.class a.office 不允許只用聯合變數名作賦值或其它操作。 也不允許對聯合變數作初始化賦值,賦值只能在程式中進行

    聯合”與“結構”有一些相似之處。但兩者有本質上的不同。在結構中各成員有各自的記憶體空間, 一個結構變數的總長度是各成員長度之和。而在“聯合”中,各成員共享一段記憶體空間, 一個聯合變數的長度等於各成員中最長的長度。應該說明的是, 這裡所謂的共享不是指把多個成員同時裝入一個聯合變數內, 而是指該聯合變數可被賦予任一成員值,但每次只能賦一種值, 賦入新值則衝去舊值。聯合型別的定義和聯合變數的說明一個聯合型別必須經過定義之後, 才能把變數說明為該聯合型別。

  • 中秋節和大豐收的關聯?
  • 德邦物流有空運嗎?