溫馨提示×

溫馨提示×

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

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

C語言共用體聯(lián)合體是什么

發(fā)布時間:2021-11-22 14:57:28 來源:億速云 閱讀:186 作者:iii 欄目:互聯(lián)網(wǎng)科技

本篇內(nèi)容主要講解“C語言共用體聯(lián)合體是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“C語言共用體聯(lián)合體是什么”吧!

文/Edward

共用體又稱為聯(lián)合體,它是C語言中的一種特殊的數(shù)據(jù)類型。它允許用戶在相同的內(nèi)存位置存儲不同的數(shù)據(jù)類型。用戶可以定義一個帶有多成員的共用體,但是任何時候這些成員都共享同一塊內(nèi)存。舉個例子,共用體的存儲就好像是小孩子玩的太空沙,一塊太空沙它的大小是固定的,有且只有這么多,而共用體內(nèi)部的存儲就好像一個又一個模具,你可以將這塊太空沙分成兩塊放置到兩個小一點的小熊模具里面,它就變成了兩只小熊,也可以將它放到一塊大一點的老虎模具里面,它就變成了一只老虎。因此,共用體的本質(zhì)就是同一塊內(nèi)存的不同形式的訪問。
為了定義共用體,您必須使用 union 語句,方式與定義結構類似。union 語句定義了一個新的數(shù)據(jù)類型,帶有多個成員。union 語句的格式如下:
union 共用體標簽(可缺?。?/em>
{
      數(shù)據(jù)類型 成員變量1;
      數(shù)據(jù)類型 成員變量2;
      ……;
} 共用體變量1,共用體變量2……;
我們可以發(fā)現(xiàn),其實共用體定義時候的形式和結構體如出一轍,只不過定義的關鍵詞不一樣。在定義時,共用體標簽可以省略,聯(lián)合體內(nèi)部的成員變量數(shù)據(jù)類型是標準的變量定義,比如 int i; 或者 float f; 或者其他有效的變量定義,當然也可以是結構體。
下面我們定義一個名為 Data 的共用體類型,它有三個成員 i、f 和 str,定義如下:
union Data
{
   int i;
   float f;
   char  str[20];
} data;
現(xiàn)在,這個Data 類型的共用體可以存儲一個整數(shù)、一個浮點數(shù),或者一個字符串。這意味著一個變量(相同的內(nèi)存位置)可以存儲多個多種類型的數(shù)據(jù)。您可以根據(jù)需要在一個共用體內(nèi)使用任何內(nèi)置的或者用戶自定義的數(shù)據(jù)類型。Data共用體的內(nèi)存分別如圖1所示。
 C語言共用體聯(lián)合體是什么
圖1 共用體內(nèi)存存儲
共用體占用的內(nèi)存應足夠存儲共用體中最大的成員。例如,在上面的實例中,Data 將占用 20 個字節(jié)的內(nèi)存空間,因為在各個成員中,字符串所占用的空間是最大的。
共用體內(nèi)部的成員變量訪問和結構體一樣,用“共用體.成員名”即可。
下面的實例將顯示上面的共用體占用的總內(nèi)存大小,程序設計的思路為,我們?nèi)ザx一個共用體,在里面存入不同的長度的變量,最后用sizeof去測量共用體,看看最后程序的輸出,具體代碼如圖2所示。
C語言共用體聯(lián)合體是什么
圖2 測量共用體內(nèi)存大小
共用體說到底還是同一塊內(nèi)存空間的不同形式訪問,你可以將這塊內(nèi)存以int類型去訪問,也可以將這塊內(nèi)存以char數(shù)組的類型去訪問。我們可以通過一個例子來說明上述的論點。論證的過程很簡單,我們先定義一個共用體,在這個結構體里面定義兩個變量,一個為“unsignedint”類型,一個為“char”類型數(shù)組。接著給unsigned int的變量賦值,最后將這兩個變量都打印出來。如圖3所示。
C語言共用體聯(lián)合體是什么
圖3 共用體同一塊內(nèi)存的不同形式訪問
我們之前說過,數(shù)組定義時,其內(nèi)部的元素地址都是向上增長的,因此我們對共同體中的數(shù)組賦值后,再用一個四字節(jié)的無符號整形變量去訪問,就可以得到組合到一起的數(shù)值了。
一般來說,小端模式(高字節(jié)存儲到高地址)的計算機會將高位地址的數(shù)組元素放在4字節(jié)無符號整數(shù)的高字節(jié),低地址的數(shù)組元素,放在4字節(jié)無符號整數(shù)的低字節(jié)。大端模式(高字節(jié)存儲到低地址)相反。利用這個原理,我們就可以判斷計算機存儲的大小端了。

到此,相信大家對“C語言共用體聯(lián)合體是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關內(nèi)容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!

向AI問一下細節(jié)

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

AI