欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言聯(lián)合體類型的實現(xiàn)

 更新時間:2024年02月06日 11:34:12   作者:愚潤求學  
聯(lián)合體也是一種構造數(shù)據(jù)類型,和結構體類型一樣,它也是由各種不同類型的數(shù)據(jù)組成,本文主要介紹了C語言聯(lián)合體類型的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下

一,什么是聯(lián)合體

聯(lián)合體也稱共用體
像結構體一樣,聯(lián)合體也是由一個或者多個成員構成,這些成員的類型可以不同。但是,與結構體不同的是:聯(lián)合體的所有成員共用一塊內(nèi)存空間。(即:給聯(lián)合體其中的一個成員賦值,其他成員的值也會跟著被改變)

二,聯(lián)合體的聲明

1,聯(lián)合體類型的聲明

C語言中聯(lián)合體類型的定義形式:

union 聯(lián)合體名
{
成員項表列
};

例如:
(我們定義一個同時由char和int型構成的聯(lián)合體)

union Un
{
   char c;
   int i;
}; (注意:分號不能丟)

2,聯(lián)合體變量的創(chuàng)建

同結構體變量的創(chuàng)建類似,我們可以在聲明聯(lián)合體類型的同時創(chuàng)建變量;也可以在聲明后,再創(chuàng)建變量
如:
(1)先聲明聯(lián)合體類型,再創(chuàng)建變量

#include<stdio.h>
union Un
{
	char c;
	int i;
};
union Un u1;

(2)在聲明聯(lián)合體類型的同時創(chuàng)建變量

union Un
{
	char c;
	int i;
}u1;

對聯(lián)合體成員的引用也與對結構體成員的引用相同

三,聯(lián)合體的特點

1,聯(lián)合體與結構體的對比

聯(lián)合體的大部分與結構體相似,其獨特之處就是所有成員共用一塊內(nèi)存空間

例如,我們看擁有相同成員的結構體和聯(lián)合體對比:

在這里插入圖片描述

對于s1 和 u1的內(nèi)存分配情況應該是:

在這里插入圖片描述

我們可以用sizeof算一算,看看結果:
運行下面代碼:

int main()
{
	printf("%d\n", sizeof(s1));
	printf("%d\n", sizeof(u1));
	return 0;
}

輸出:

這里是引用

可以發(fā)現(xiàn):和我們上面的分析一樣

2,對聯(lián)合體成員進行改變

下面我們就對聯(lián)合體u1中的成員c進行賦值,然后再打印成員i

#include<stdio.h>
union Un
{
	char c;
	int i;
}u1;
int main()
{
	u1.c = 1;
	printf("%d", u1.i);
	return 0;
}

運行結果:

在這里插入圖片描述

可見:盡管沒有給成員i賦值,但是隨著成員c被修改成員i的值也發(fā)生了變化

四,聯(lián)合體的大小

上面提到的聯(lián)合體u1的大小是4,剛好是當中最大的int類型的大小,難道聯(lián)合體的大小就是其中最大成員的大小嗎?
答案是:錯誤的
因為聯(lián)合體的大小也要滿足是最大對齊數(shù)的整數(shù)倍

?換句話來說,聯(lián)合體的大小要滿足以下兩個條件:
1,大于或等于最大的成員(至少要能裝下最大的成員)
2,同時是最大對齊數(shù)的整數(shù)倍

對于上面的u1
最大成員:int類型的大小是4
int的最大對齊數(shù)也是4,所以聯(lián)合體u1的大小是4

再看下面的代碼(多加一個字符數(shù)組):

#include<stdio.h>
union Un
{
	char c;
	int i;
	char arr[6];
}u1;
int main()
{
	u1.c = 1;
	printf("%d",sizeof(u1));
	return 0;
}

運行結果:

在這里插入圖片描述

這是因為:
1,最大成員char arr[6]的大小是6
2,最大對齊數(shù)是4
6不是4的倍數(shù),所以擴寬到8,所以聯(lián)合體的大小是8

到此這篇關于C語言聯(lián)合體類型的實現(xiàn)的文章就介紹到這了,更多相關C語言聯(lián)合體類型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C語言使用ffmpeg實現(xiàn)單線程異步的視頻播放器

    C語言使用ffmpeg實現(xiàn)單線程異步的視頻播放器

    這篇文章主要為大家詳細介紹了C語言如何使用ffmpeg實現(xiàn)單線程異步的視頻播放器功能,文中的示例代碼講解詳細,感興趣的小伙伴可以嘗試一下
    2022-12-12
  • C++實現(xiàn)俄羅斯方塊源碼

    C++實現(xiàn)俄羅斯方塊源碼

    這篇文章主要為大家詳細介紹了C++實現(xiàn)俄羅斯方塊源碼完整版,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • C++小知識:C/C++中不要按值傳遞數(shù)組

    C++小知識:C/C++中不要按值傳遞數(shù)組

    今天小編就為大家分享一篇關于C++小知識:C/C++中不要按值傳遞數(shù)組,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • C語言 語義陷阱超詳細梳理總結

    C語言 語義陷阱超詳細梳理總結

    這篇文章主要介紹了C語言常見的一些語義陷阱,梳理的比較全面,對我們做開發(fā)的過程中有一定幫助,感興趣的朋友快來看看吧
    2022-03-03
  • libevent庫的使用--定時器的使用實例

    libevent庫的使用--定時器的使用實例

    這篇文章主要介紹了libevent庫的使用--定時器的使用實例,有需要的朋友可以參考一下
    2013-12-12
  • C語言鏈表實現(xiàn)貪吃蛇游戲

    C語言鏈表實現(xiàn)貪吃蛇游戲

    這篇文章主要為大家詳細介紹了C語言鏈表實現(xiàn)貪吃蛇游戲源碼,適合C語言入門者學習閱讀,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • C語言malloc分配問題詳解

    C語言malloc分配問題詳解

    這篇文章主要介紹了c語言 malloc函數(shù)的分配問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-09-09
  • Ubuntu18.04下QT開發(fā)Android無法連接設備問題解決實現(xiàn)

    Ubuntu18.04下QT開發(fā)Android無法連接設備問題解決實現(xiàn)

    本文主要介紹了Ubuntu18.04下QT開發(fā)Android無法連接設備問題解決實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • c++ 解析yaml文件的步驟

    c++ 解析yaml文件的步驟

    這篇文章主要介紹了c++ 解析yaml文件的步驟,幫助大家更好的理解和使用c++,感興趣的朋友可以了解下
    2020-12-12
  • C++利用ImGUI繪制D3D外部菜單

    C++利用ImGUI繪制D3D外部菜單

    ImGUI 它是與平臺無關的C++輕量級跨平臺圖形界面庫,沒有任何第三方依賴,可以將ImGUI的源碼直接加到項目中使用。本文將利用ImGUI繪制D3D外部菜單,需要的可以參考一下
    2022-09-09

最新評論