最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

C語(yǔ)言共用體(C語(yǔ)言u(píng)nion用法)詳解

2023-03-11 13:25 作者:c語(yǔ)言-小新  | 我要投稿

通過(guò)前面的講解,我們知道結(jié)構(gòu)體(Struct)是一種構(gòu)造類型或復(fù)雜類型,它可以包含多個(gè)類型不同的成員。在C語(yǔ)言中,還有另外一種和結(jié)構(gòu)體非常類似的語(yǔ)法,叫做共用體(Union),它的定義格式為:

union 共用體名{ ? ?成員列表 };

共用體有時(shí)也被稱為聯(lián)合或者聯(lián)合體,這也是 Union 這個(gè)單詞的本意。

結(jié)構(gòu)體和共用體的區(qū)別在于:結(jié)構(gòu)體的各個(gè)成員會(huì)占用不同的內(nèi)存,互相之間沒(méi)有影響;而共用體的所有成員占用同一段內(nèi)存,修改一個(gè)成員會(huì)影響其余所有成員。

結(jié)構(gòu)體占用的內(nèi)存大于等于所有成員占用的內(nèi)存的總和(成員之間可能會(huì)存在縫隙),共用體占用的內(nèi)存等于最長(zhǎng)的成員占用的內(nèi)存。共用體使用了內(nèi)存覆蓋技術(shù),同一時(shí)刻只能保存一個(gè)成員的值,如果對(duì)新的成員賦值,就會(huì)把原來(lái)成員的值覆蓋掉。

共用體也是一種自定義類型,可以通過(guò)它來(lái)創(chuàng)建變量,例如:





上面是先定義共用體,再創(chuàng)建變量,也可以在定義共用體的同時(shí)創(chuàng)建變量:




如果不再定義新的變量,也可以將共用體的名字省略:





共用體 data 中,成員 f 占用的內(nèi)存最多,為 8 個(gè)字節(jié),所以 data 類型的變量(也就是 a、b、c)也占用 8 個(gè)字節(jié)的內(nèi)存,請(qǐng)看下面的演示:





運(yùn)行結(jié)果:

4, 4 40, @, 40 39, 9, 39 2059, Y, 2059 3E25AD54, T, AD54

這段代碼不但驗(yàn)證了共用體的長(zhǎng)度,還說(shuō)明共用體成員之間會(huì)相互影響,修改一個(gè)成員的值會(huì)影響其他成員。

要想理解上面的輸出結(jié)果,弄清成員之間究竟是如何相互影響的,就得了解各個(gè)成員在內(nèi)存中的分布。以上面的 data 為例,各個(gè)成員在內(nèi)存中的分布如下:

編輯切換為居中

成員 n、ch、m 在內(nèi)存中“對(duì)齊”到一頭,對(duì) ch 賦值修改的是前一個(gè)字節(jié),對(duì) m 賦值修改的是前兩個(gè)字節(jié),對(duì) n 賦值修改的是全部字節(jié)。也就是說(shuō),ch、m 會(huì)影響到 n 的一部分?jǐn)?shù)據(jù),而 n 會(huì)影響到 ch、m 的全部數(shù)據(jù)。

上圖是在絕大多數(shù) PC 機(jī)上的內(nèi)存分布情況,如果是 51 單片機(jī),情況就會(huì)有所不同:

編輯切換為居中


為什么不同的機(jī)器會(huì)有不同的分布情況呢?這跟機(jī)器的存儲(chǔ)模式有關(guān),我們將在VIP教程《大端小端以及判別方式》一節(jié)中展開(kāi)探討。

共用體的應(yīng)用

共用體在一般的編程中應(yīng)用較少,在單片機(jī)中應(yīng)用較多。對(duì)于 PC 機(jī),經(jīng)常使用到的一個(gè)實(shí)例是: 現(xiàn)有一張關(guān)于學(xué)生信息和教師信息的表格。學(xué)生信息包括姓名、編號(hào)、性別、職業(yè)、分?jǐn)?shù),教師的信息包括姓名、編號(hào)、性別、職業(yè)、教學(xué)科目。請(qǐng)看下面的表格:

Name

Num

Sex

Profession

Score / Course

HanXiaoXiao

501

f

s

89.5

YanWeiMin

1011

m

t

math

LiuZhenTao

109

f

t

English

ZhaoFeiYan

982

m

s

95.0


f 和 m 分別表示女性和男性,s 表示學(xué)生,t 表示教師。可以看出,學(xué)生和教師所包含的數(shù)據(jù)是不同的。現(xiàn)在要求把這些信息放在同一個(gè)表格中,并設(shè)計(jì)程序輸入人員信息然后輸出。


如果把每個(gè)人的信息都看作一個(gè)結(jié)構(gòu)體變量的話,那么教師和學(xué)生的前 4 個(gè)成員變量是一樣的,第 5 個(gè)成員變量可能是 score 或者 course。當(dāng)?shù)?4 個(gè)成員變量的值是 s 的時(shí)候,第 5 個(gè)成員變量就是 score;當(dāng)?shù)?4 個(gè)成員變量的值是 t 的時(shí)候,第 5 個(gè)成員變量就是 course。

經(jīng)過(guò)上面的分析,我們可以設(shè)計(jì)一個(gè)包含共用體的結(jié)構(gòu)體,請(qǐng)看下面的代碼:




運(yùn)行結(jié)果:

Input info: HanXiaoXiao 501 f s 89.5↙ Input info: YanWeiMin 1011 m t math↙ Input info: LiuZhenTao 109 f t English↙ Input info: ZhaoFeiYan 982 m s 95.0↙ Name ? ? ? ? ? ?Num ? ? Sex ? ? Profession ? ? ?Score / Course HanXiaoXiao ? ? 501 ? ? f ? ? ? s ? ? ? ? ? ? ? 89.500000 YanWeiMin ? ? ? 1011 ? ?m ? ? ? t ? ? ? ? ? ? ? math LiuZhenTao ? ? ?109 ? ? f ? ? ? t ? ? ? ? ? ? ? English ZhaoFeiYan ? ? ?982 ? ? m ? ? ? s ? ? ? ? ? ? ? 95.000000


C語(yǔ)言共用體(C語(yǔ)言u(píng)nion用法)詳解的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
天津市| 万全县| 宾川县| 峨边| 古浪县| 玉树县| 班戈县| 壶关县| 板桥市| 永胜县| 丰县| 潜山县| 奈曼旗| 从江县| 漳浦县| 扎囊县| 建阳市| 旅游| 鱼台县| 松原市| 西盟| 阳高县| 玉龙| 江华| 彰化县| 土默特右旗| 九寨沟县| 聂荣县| 大理市| 琼海市| 延吉市| 乌拉特中旗| 黔南| 历史| 庆阳市| 盐津县| 嘉禾县| 望谟县| 岱山县| 体育| 蓝山县|