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

C語(yǔ)言聯(lián)合體Union特點(diǎn)及運(yùn)用全面講解教程

 更新時(shí)間:2021年10月22日 15:26:52   作者:高郵吳少  
這篇文章主要為大家介紹了C語(yǔ)言聯(lián)合體Union特點(diǎn)及運(yùn)用的全面講解教程有需要深度朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪

前言

上一期C語(yǔ)言快速入門(mén)我們學(xué)習(xí)了枚舉類(lèi)型及相關(guān)知識(shí)點(diǎn)

這期我們來(lái)跟著筆者學(xué)習(xí)一下聯(lián)合體相關(guān)知識(shí),相信聰明的你一定會(huì)有所收獲!

提示:以下是本篇文章正文內(nèi)容,下面案例可供參考

一、聯(lián)合(共用體)定義

聯(lián)合是一種特殊的自定義類(lèi)型,該種類(lèi)型定義的變量也包含一系列的成員,特征是這些成員共用同一塊空間,所以聯(lián)合體也被稱(chēng)為共用體。

代碼如下(示例):

#include<stdio.h>
union Un//聯(lián)合類(lèi)型的聲明,union是聯(lián)合體關(guān)鍵字
{
	char c;//1字節(jié)
	int i;//4字節(jié)
};
int main()
{
	union Un u = {0};
	printf("%d\n", sizeof(u));
	printf("%p\n", &u);
	printf("%p\n", &(u.c));//u.c表示聯(lián)合體的成員c,該引用方法類(lèi)似結(jié)構(gòu)體
	printf("%p\n", &(u.i));
}

打印結(jié)果如下:

在這里插入圖片描述

由sizeof(u)我們知道這個(gè)聯(lián)合體總計(jì)占4個(gè)字節(jié),而聯(lián)合體成員i是int類(lèi)型的,它占了4個(gè)字節(jié),另外一個(gè)c是char類(lèi)型占了1個(gè)字節(jié),兩個(gè)一起占了4個(gè)字節(jié)。說(shuō)明c和i必然有一處是共用一塊空間的,再者有u本身和它的兩個(gè)成員是一個(gè)地址如上圖003EFA80,說(shuō)明首地址是重合的,簡(jiǎn)易示圖如下:

在這里插入圖片描述

由于共用空間這種特點(diǎn)就導(dǎo)致了,你改變c,i也會(huì)隨之改變。這里和結(jié)構(gòu)體是完全不一樣的,結(jié)構(gòu)體成員相互獨(dú)立,但聯(lián)合體不一樣,改一個(gè),其他的也會(huì)改變。所以這里,在同一時(shí)間,你只能使用一個(gè)聯(lián)合體成員,你使用c就不要用i,因?yàn)槟鉩改變的時(shí)候,一定會(huì)影響到你i的使用,程序非常容易出問(wèn)題。

二、聯(lián)合的特點(diǎn)及運(yùn)用

聯(lián)合的成員是共用一塊內(nèi)存空間的,這樣一個(gè)聯(lián)合變量的大小,至少是最大成員的大?。ㄒ?yàn)槁?lián)合)

我們?cè)賮?lái)看看聯(lián)合體在解決判斷內(nèi)存存儲(chǔ)是大端存儲(chǔ)還是小端存儲(chǔ)的優(yōu)勢(shì)
代碼如下(示例):

union U
{
	char c;
	int i;
}u;//聯(lián)合體變量創(chuàng)建方法類(lèi)比結(jié)構(gòu)體
int main()
{
	u.i = 1;
	//0x 00 00 00 01
	//低地址-------->高地址
	//01 00 00 00 小端存儲(chǔ) 低位放低地址
	//00 00 00 01 大端存儲(chǔ) 低位放高地址
	if (u.c == 1)
	{
		printf("小端");
	}
	else
	{
		printf("大端");
	}
}

由于i和c是共用一塊內(nèi)存,我們創(chuàng)建了i之后只要判斷1是在高地址還是低地址即可,又因?yàn)閏是和i是一個(gè)地址(低),所以只要判斷c里面放的是1還是0即可,非常的方便。

三、聯(lián)合的大小計(jì)算

在計(jì)算聯(lián)合體大小之前我們必須知道兩個(gè)知識(shí)點(diǎn):
1.聯(lián)合的大小至少是最大成員的大小
2.當(dāng)最大成員大小不是最大對(duì)齊數(shù)的整數(shù)倍的時(shí)候,就要對(duì)齊到最大對(duì)齊數(shù)的整數(shù)倍。

舉例說(shuō)明:

#include<stdio.h>
union Un1
{
	char c[5];//1個(gè)char類(lèi)型占1字節(jié),5個(gè)占5字節(jié)
	int i;//4字節(jié)
};
union Un2
{
	short c[7];//1個(gè)short類(lèi)型占2字節(jié),7個(gè)占14字節(jié)
	int i;//4字節(jié)
};
int main()
{
	printf("%d\n", sizeof(union Un1));//打印8
	printf("%d\n", sizeof(union Un2));//打印16
}

Un1解釋:

char創(chuàng)建一個(gè)大小為5的數(shù)組和放5個(gè)char類(lèi)型的是一樣道理,對(duì)齊數(shù)仍然是1
int類(lèi)型的i自身大小4字節(jié),默認(rèn)對(duì)齊數(shù)8,對(duì)齊數(shù)是4。i和c兩個(gè)最大的對(duì)齊數(shù)是4,而最大成員大小是數(shù)組c(5個(gè)字節(jié)),5不是4的倍數(shù),我們需要對(duì)齊到最大對(duì)齊數(shù)的整數(shù)倍,也就是8(從5到8會(huì)浪費(fèi)3個(gè)字節(jié)空間)

Un2解釋?zhuān)?/p>

short創(chuàng)建的c數(shù)組,我們同上可知其c對(duì)齊數(shù)是2,i對(duì)齊數(shù)是4,最大對(duì)齊數(shù)為4。最大成員大小也就是c數(shù)組大小為14,14并不是最大對(duì)齊數(shù)4的整數(shù)倍,14往上對(duì)齊到16,16是4的整數(shù)倍。

總結(jié)

本文介紹了聯(lián)合體的定義、特點(diǎn)及使用、還有聯(lián)合體大小的相關(guān)計(jì)算,相信認(rèn)真學(xué)習(xí)的你一定會(huì)有所收獲,期待你的關(guān)注,加快筆者更新速度嘿嘿。

以上就是C語(yǔ)言聯(lián)合體Union特點(diǎn)及運(yùn)用全面講解教程的詳細(xì)內(nèi)容,更多關(guān)于C語(yǔ)言聯(lián)合體Union教程的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C++使用棧實(shí)現(xiàn)括號(hào)匹配的代碼詳解

    C++使用棧實(shí)現(xiàn)括號(hào)匹配的代碼詳解

    在編程中,括號(hào)匹配是一個(gè)常見(jiàn)問(wèn)題,尤其是在處理數(shù)學(xué)表達(dá)式、編譯器解析等任務(wù)時(shí),棧是一種非常適合處理此類(lèi)問(wèn)題的數(shù)據(jù)結(jié)構(gòu),能夠精確地管理括號(hào)的匹配問(wèn)題,本文將通過(guò) C++ 代碼,詳細(xì)講解如何使用棧來(lái)實(shí)現(xiàn)括號(hào)匹配,需要的朋友可以參考下
    2025-02-02
  • c語(yǔ)言中static的用法詳細(xì)示例分析

    c語(yǔ)言中static的用法詳細(xì)示例分析

    以下是對(duì)c語(yǔ)言中static函數(shù)的用法進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下
    2013-08-08
  • C語(yǔ)言動(dòng)態(tài)內(nèi)存管理深入探討

    C語(yǔ)言動(dòng)態(tài)內(nèi)存管理深入探討

    動(dòng)態(tài)內(nèi)存是相對(duì)靜態(tài)內(nèi)存而言的。所謂動(dòng)態(tài)和靜態(tài)就是指內(nèi)存的分配方式。動(dòng)態(tài)內(nèi)存是指在堆上分配的內(nèi)存,而靜態(tài)內(nèi)存是指在棧上分配的內(nèi)存,本文帶你深入探究C語(yǔ)言中動(dòng)態(tài)內(nèi)存的管理
    2022-06-06
  • C#?CLR學(xué)習(xí)?C++使用namespace實(shí)例詳解

    C#?CLR學(xué)習(xí)?C++使用namespace實(shí)例詳解

    這篇文章主要為大家介紹了C#?CLR學(xué)習(xí)?C++使用namespace實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • Qt讀寫(xiě)ini文件之QSettings用法

    Qt讀寫(xiě)ini文件之QSettings用法

    這篇文章主要為大家介紹了Qt讀寫(xiě)ini文件之QSettings的使用方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • VS2022中使用Copilot的圖文教程

    VS2022中使用Copilot的圖文教程

    大家都知道Copilot可以自動(dòng)幫助寫(xiě)代碼,那么這個(gè)工具是如果使用的呢?很多朋友不是很清楚,今天小編給大家分享一篇教程關(guān)于VS2022中使用Copilot的圖文教程,感興趣的朋友一起看看吧
    2022-04-04
  • cmake 學(xué)習(xí)筆記

    cmake 學(xué)習(xí)筆記

    這篇文章主要介紹了作者學(xué)習(xí)cmake 的相關(guān)資料與心得,有需要的小伙伴可以參考下
    2017-07-07
  • C++中?‘=default?’及‘?=delete?’的使用

    C++中?‘=default?’及‘?=delete?’的使用

    這篇文章主要介紹了C++中?=default?及?=delete?使用,使用=default和=delete可以控制編譯器默認(rèn)函數(shù)體的使用,下面我們就來(lái)看看具體的室友方法吧,需要的朋友也可以參考一下
    2021-12-12
  • C++中priority_queue與仿函數(shù)實(shí)現(xiàn)方法

    C++中priority_queue與仿函數(shù)實(shí)現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于C++中priority_queue與仿函數(shù)實(shí)現(xiàn)的相關(guān)資料,優(yōu)先級(jí)隊(duì)列是一種容器適配器,其底層通常采用vector容器,并通過(guò)堆算法來(lái)維護(hù)元素的順序,文中通過(guò)代碼介紹的非常詳細(xì)《》需要的朋友可以參考下
    2024-10-10
  • 樹(shù)形結(jié)構(gòu)的3中搜索方式示例分享

    樹(shù)形結(jié)構(gòu)的3中搜索方式示例分享

    樹(shù)的3中常見(jiàn)搜索方式,包括二叉樹(shù)方式(每一層只有0和1)、滿(mǎn)m叉樹(shù)(每一層都有0 到m - 1)、子集樹(shù),也稱(chēng)為全排列樹(shù),需要的朋友可以參考下
    2014-02-02

最新評(píng)論

阳城县| 临夏县| 图木舒克市| 清水县| 文登市| 吐鲁番市| 永康市| 安泽县| 墨玉县| 呼伦贝尔市| 杭锦后旗| 兴城市| 安西县| 屏东县| 遵义市| 济源市| 潜山县| 平安县| 海伦市| 汉源县| 吉林省| 蒙山县| 遂溪县| 彭水| 济南市| 买车| 甘肃省| 绥化市| 北碚区| 宜丰县| 自治县| 安新县| 灌南县| 淮阳县| 肃北| 漳平市| 沅江市| 九寨沟县| 乌审旗| 松原市| 武夷山市|