最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語(yǔ)言關(guān)鍵字union的定義和使用詳解

 更新時(shí)間:2021年02月08日 11:34:29   作者:沐歌愛編程  
這篇文章主要介紹了C語(yǔ)言關(guān)鍵字union的定義和使用詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

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

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

當(dāng)定義結(jié)構(gòu)對(duì)象時(shí),如果沒有顯式地初始化它們,則會(huì)采用一般初始化規(guī)則:如果該結(jié)構(gòu)對(duì)象屬于動(dòng)態(tài)存儲(chǔ)類型,那么其成員具有不確定的初始值。

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

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

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

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

union [標(biāo)簽名稱]{成員聲明列表};

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

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

這種類型的對(duì)象可以存儲(chǔ)一個(gè)整數(shù)、一個(gè)浮點(diǎn)數(shù)或一個(gè)短字符串。

例如:

union StateMachine

{

  char character;

  int number;

  char *str;

  double exp;

};

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

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

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

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

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

union Data var1={77},

var2={.str="Mary"},

var3=var1,

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

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

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

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

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

 第二種 ,定義聯(lián)合體類型的同時(shí)聲明聯(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)合體類型的同時(shí)聲明聯(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變量的長(zhǎng)度應(yīng)等于 perdata 的成員中最長(zhǎng)的長(zhǎng)度, 即等于office數(shù)組的長(zhǎng)度,共10個(gè)字節(jié)。對(duì)a,b變量如賦予整型值時(shí),只使用了2個(gè)字節(jié),而賦予字符數(shù)組時(shí),可用10個(gè)字節(jié)。

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

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

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

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

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

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

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

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

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

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

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

到此這篇關(guān)于C語(yǔ)言關(guān)鍵字union的定義和使用詳解的文章就介紹到這了,更多相關(guān)C語(yǔ)言 union關(guān)鍵字內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C/C++實(shí)現(xiàn)推箱子小游戲

    C/C++實(shí)現(xiàn)推箱子小游戲

    這篇文章主要為大家詳細(xì)介紹了C/C++實(shí)現(xiàn)推箱子小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • C語(yǔ)言互換最大值與最小值的位置

    C語(yǔ)言互換最大值與最小值的位置

    大家好,本篇文章主要講的是C語(yǔ)言互換最大值與最小值的位置,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • C語(yǔ)言實(shí)現(xiàn)的統(tǒng)計(jì)素?cái)?shù)并求和代碼分享

    C語(yǔ)言實(shí)現(xiàn)的統(tǒng)計(jì)素?cái)?shù)并求和代碼分享

    這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)的統(tǒng)計(jì)素?cái)?shù)并求和代碼分享,來自PAT平臺(tái)(浙江大學(xué)計(jì)算機(jī)程序設(shè)計(jì)能力考試系統(tǒng))的一個(gè)題目,需要的朋友可以參考下
    2014-08-08
  • C語(yǔ)言?超詳細(xì)總結(jié)講解二叉樹的概念與使用

    C語(yǔ)言?超詳細(xì)總結(jié)講解二叉樹的概念與使用

    二叉樹可以簡(jiǎn)單理解為對(duì)于一個(gè)節(jié)點(diǎn)來說,最多擁有一個(gè)上級(jí)節(jié)點(diǎn),同時(shí)最多具備左右兩個(gè)下級(jí)節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)。本文將詳細(xì)介紹一下C++中二叉樹的概念和結(jié)構(gòu),需要的可以參考一下
    2022-04-04
  • C語(yǔ)言實(shí)現(xiàn)放煙花的程序

    C語(yǔ)言實(shí)現(xiàn)放煙花的程序

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)放煙花的程序,有音樂播放,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-02-02
  • C++簡(jiǎn)明分析臨時(shí)對(duì)象是什么

    C++簡(jiǎn)明分析臨時(shí)對(duì)象是什么

    對(duì)性能來說,許多的問題都需要和出現(xiàn)頻率及本身執(zhí)行一次的開銷掛鉤,有些問題雖然看似比較開銷較大,但是很少會(huì)執(zhí)行到,那也不會(huì)對(duì)程序有大的影響;同樣一個(gè)很小開銷的函數(shù)執(zhí)行很頻繁,同樣會(huì)對(duì)程序的執(zhí)行效率有很大影響。本章中作者主要根據(jù)臨時(shí)對(duì)象來闡述這樣一個(gè)觀點(diǎn)
    2022-04-04
  • Qt定時(shí)器和隨機(jī)數(shù)詳解

    Qt定時(shí)器和隨機(jī)數(shù)詳解

    在前一篇中我們介紹了鍵盤和鼠標(biāo)事件,其實(shí)還有一個(gè)非常常用的事件,就是定時(shí)器事件,如果要對(duì)程序?qū)崿F(xiàn)時(shí)間上的控制,那么就要使用到定時(shí)器。而隨機(jī)數(shù)也是很常用的一個(gè)功能,在我們要想產(chǎn)生一個(gè)隨機(jī)的結(jié)果時(shí)就要使用到隨機(jī)數(shù)。本文我們就來簡(jiǎn)單介紹一下定時(shí)器和隨機(jī)數(shù)。
    2015-06-06
  • C++拷貝構(gòu)造函數(shù)(深拷貝與淺拷貝)詳解

    C++拷貝構(gòu)造函數(shù)(深拷貝與淺拷貝)詳解

    深拷貝和淺拷貝可以簡(jiǎn)單理解為:如果一個(gè)類擁有資源,當(dāng)這個(gè)類的對(duì)象發(fā)生復(fù)制過程的時(shí)候,資源重新分配,這個(gè)過程就是深拷貝,反之,沒有重新分配資源,就是淺拷貝
    2013-09-09
  • C++11新特性之a(chǎn)uto的使用

    C++11新特性之a(chǎn)uto的使用

    熟悉腳本語(yǔ)言的人都知道,很多腳本語(yǔ)言都引入了“類型自動(dòng)推斷”技術(shù):比如Python,可以直接聲明變量,在運(yùn)行時(shí)進(jìn)行類型檢查。隨著C++11標(biāo)準(zhǔn)的發(fā)布,C++語(yǔ)言也引入了類型自動(dòng)推斷的功能。這篇文章主要介紹了C++11新特性之a(chǎn)uto的使用,有需要的朋友們可以參考借鑒。
    2016-12-12
  • OpenCV實(shí)現(xiàn)彩色照片轉(zhuǎn)換成素描卡通片

    OpenCV實(shí)現(xiàn)彩色照片轉(zhuǎn)換成素描卡通片

    這篇文章主要為大家詳細(xì)介紹了OpenCV實(shí)現(xiàn)彩色照片轉(zhuǎn)換成素描卡通片,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01

最新評(píng)論

庆阳市| 玉山县| 榆林市| 个旧市| 西充县| 新绛县| 铁岭县| 施甸县| 靖宇县| 宁明县| 时尚| 龙门县| 东乌| 射阳县| 班玛县| 阿拉善右旗| 峡江县| 资兴市| 鸡泽县| 武强县| 盘山县| 长白| 屯昌县| 新津县| 泸西县| 永城市| 南阳市| 长白| 潼关县| 临沂市| 兰考县| 米泉市| 静海县| 宿松县| 灯塔市| 大足县| 铅山县| 香格里拉县| 体育| 通海县| 花莲市|