中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

C語言共用體聯合體是什么

發布時間:2021-11-22 14:57:28 來源:億速云 閱讀:187 作者:iii 欄目:互聯網科技

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

文/Edward

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

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

向AI問一下細節

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

AI

方山县| 惠来县| 阳原县| 任丘市| 辰溪县| 碌曲县| 那曲县| 洛川县| 信阳市| 镇赉县| 荣昌县| 塔河县| 华坪县| 永丰县| 棋牌| 武城县| 灵丘县| 资阳市| 民丰县| 加查县| 武陟县| 乌什县| 木兰县| 柳州市| 临湘市| 开化县| 库伦旗| 洛川县| 花莲县| 庄浪县| 德格县| 田林县| 镇江市| 阿克| 延安市| 南雄市| 永修县| 大同县| 雷山县| 郯城县| 布拖县|