一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C/C++ - C語言聯合體Union特點及運用全面講解教程

C語言聯合體Union特點及運用全面講解教程

2022-02-13 16:08高郵吳少 C/C++

這篇文章主要為大家介紹了C語言聯合體Union特點及運用的全面講解教程有需要深度朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪

前言

上一期C語言快速入門我們學習了枚舉類型及相關知識點

這期我們來跟著筆者學習一下聯合體相關知識,相信聰明的你一定會有所收獲!

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

 

一、聯合(共用體)定義

聯合是一種特殊的自定義類型,該種類型定義的變量也包含一系列的成員,特征是這些成員共用同一塊空間,所以聯合體也被稱為共用體。

代碼如下(示例):

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

打印結果如下:

C語言聯合體Union特點及運用全面講解教程

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

C語言聯合體Union特點及運用全面講解教程

由于共用空間這種特點就導致了,你改變c,i也會隨之改變。這里和結構體是完全不一樣的,結構體成員相互獨立,但聯合體不一樣,改一個,其他的也會改變。所以這里,在同一時間,你只能使用一個聯合體成員,你使用c就不要用i,因為你c改變的時候,一定會影響到你i的使用,程序非常容易出問題。

 

二、聯合的特點及運用

聯合的成員是共用一塊內存空間的,這樣一個聯合變量的大小,至少是最大成員的大小(因為聯合)

我們再來看看聯合體在解決判斷內存存儲是大端存儲還是小端存儲的優勢
代碼如下(示例):

union U
{
	char c;
	int i;
}u;//聯合體變量創建方法類比結構體
int main()
{
	u.i = 1;
	//0x 00 00 00 01
	//低地址-------->高地址
	//01 00 00 00 小端存儲 低位放低地址
	//00 00 00 01 大端存儲 低位放高地址
	if (u.c == 1)
	{
		printf("小端");
	}
	else
	{
		printf("大端");
	}
}

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

 

三、聯合的大小計算

在計算聯合體大小之前我們必須知道兩個知識點:
1.聯合的大小至少是最大成員的大小
2.當最大成員大小不是最大對齊數的整數倍的時候,就要對齊到最大對齊數的整數倍。

舉例說明:

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

Un1解釋:

char創建一個大小為5的數組和放5個char類型的是一樣道理,對齊數仍然是1
int類型的i自身大小4字節,默認對齊數8,對齊數是4。i和c兩個最大的對齊數是4,而最大成員大小是數組c(5個字節),5不是4的倍數,我們需要對齊到最大對齊數的整數倍,也就是8(從5到8會浪費3個字節空間)

Un2解釋:

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

 

總結

本文介紹了聯合體的定義、特點及使用、還有聯合體大小的相關計算,相信認真學習的你一定會有所收獲,期待你的關注,加快筆者更新速度嘿嘿。

以上就是C語言聯合體Union特點及運用全面講解教程的詳細內容,更多關于C語言聯合體Union教程的資料請關注服務器之家其它相關文章!

原文鏈接:https://blog.csdn.net/m0_57180439/article/details/120417270

延伸 · 閱讀

精彩推薦
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數使用

    詳解c語言中的 strcpy和strncpy字符串函數使用

    strcpy 和strcnpy函數是字符串復制函數。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
  • C/C++深入理解goto語句的替代實現方式分析

    深入理解goto語句的替代實現方式分析

    本篇文章是對goto語句的替代實現方式進行了詳細的分析介紹,需要的朋友參考下...

    C語言教程網7342020-12-03
  • C/C++C語言實現電腦關機程序

    C語言實現電腦關機程序

    這篇文章主要為大家詳細介紹了C語言實現電腦關機程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下...

    青山的青6062022-01-04
  • C/C++C/C++經典實例之模擬計算器示例代碼

    C/C++經典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關于C/C++經典實例之模擬計算器的相關資料,文中通過示...

    jia150610152021-06-07
  • C/C++c++ 單線程實現同時監聽多個端口

    c++ 單線程實現同時監聽多個端口

    這篇文章主要介紹了c++ 單線程實現同時監聽多個端口的方法,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
  • C/C++學習C++編程的必備軟件

    學習C++編程的必備軟件

    本文給大家分享的是作者在學習使用C++進行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內存中的數據都是暫時的,當程序結束時,它們都將丟失,為了永久性的保存大量的數據,C語言提供了對文件的操作,這篇文章主要給大家介紹了關于C語言中文件...

    針眼_6702022-01-24
主站蜘蛛池模板: 日韩精品一区二区三区视频 | 非洲黑人xxxxxbbbbb| 护士被多人调教到失禁h | 久久午夜一区二区 | 国产综合久久 | 亚洲29p| 男人的天堂comwww | 极品ts赵恩静和直男激战啪啪 | 男人的天堂久久精品激情 | 国产亚洲一欧美一区二区三区 | 明星乱亚洲 | 国产欧美日韩亚洲精品区2345 | 亚洲狠狠婷婷综合久久久久网站 | 青青青青青 | 日本免费v片一二三区 | 久久免费看少妇级毛片蜜臀 | dasd-698黑人在线播放 | 99久视频| 国产人成激情视频在线观看 | 欧美成黑人性猛交xxoo | 日韩中文字幕视频在线观看 | 日本在线一区 | 国产老肥熟xxxx | 国产婷婷高清在线观看免费 | 国产一级毛片潘金莲的奶头 | 男人的天堂久久爱 | 99久久精品免费看国产四区 | 精品久久成人免费第三区 | 女bbbxxx毛片视频 | 99精品国产高清一区二区三区香蕉 | 男公厕里同性做爰 | 涩涩屋在线播放 | 扒开老师两片湿漉的肉 | 校花在公车上被内射好舒 | 欧美日韩国产亚洲一区二区三区 | 久久精品国产亚洲AV天美18 | 九九九九视频 | 国产草草| 成年女人免费 | 精品久久久噜噜噜久久久app | 三级视频中文字幕 |