久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

C語言丨關鍵字union的定義和使用

 丹楓無跡 2021-05-05

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

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

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

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

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


 

一、定義聯(lián)合(union)

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

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

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

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

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

例如:

union StateMachine 

   char character; 

   int number; 

   char *str; 

   double exp; 

}; 

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

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

二、初始化聯(lián)合(union)

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

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

union Data var1={77},

var2={.str="Mary"},

var3=var1,

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

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

三,、聯(lián)合體變量的聲明

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

 第一種 , 先定義聯(lián)合體類型,再聲明聯(lián)合體變量 ; 

 第二種 ,,定義聯(lián)合體類型的同時聲明聯(lián)合體變量,;

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

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

第一種,, 先定義聯(lián)合體類型,再聲明聯(lián)合體變量

union   perdata

{

   int class;

   char officae[10];

};

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

第二種, 定義聯(lián)合體類型的同時聲明聯(lián)合體變量:

union  perdata

int class;

char office[10]; 

} a , b ;

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

union

int class;

char office[10]; 

}a,b 

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

四,、聯(lián)合體變量的賦值和使用

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

聯(lián)合變量的成員表示為:  聯(lián)合變量名 . 成員名  

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

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

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

五,、struct和union和區(qū)別

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

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

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

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


 




    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,,謹防詐騙,。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報,。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多