C語言中Union類型的使用方法

轉自:http://blog.csdn.net/feimor/article/details/6858103

使用C語言時,常常使用struct,對于union類型卻幾乎沒有用過,只知道它是聯合類型,各字段共享一塊內存,實際應用中卻不知道它的具體用途。

今天讀《編程卓越之道》中看到有對其使用的簡單介紹,記錄在此:

首先摘錄一下struct和union的重要區別:

? ? struct為每個字段在不同的偏移處分配存儲空間,而聯合則將所有的字段重疊在內存中的相同偏移處。

聯合類型的用途:

? ? ? ? ? ? ?1、創建別名。別名是內存對象原名之外的其他名字。比如在程序中經常會用到將一個數據類型強制轉換為另一個類型,這個操作可以使用聯合來代替。

比如typedef union{

char c;

uint32 u;

}CharOfUnion v;

可以通過v.u來操作一個uint32類型的對象,當需要將uint32變量的低端字節看做一個字符的時候,只需要訪問v.c就可以了。

實際應用中,大多數的協議結構定義中,都會使用union類型來定義。

?

2、使用聯合來將較大的對象分解成組成這個對象的各個字節。(尤其在單片機編程中將float拆解成char

typedef union{

uint u;

char bytes[4];

}asBytes composite;

可以使用composite.bytes數組來訪問composite.u字段的各個字節。

轉自:http://blog.163.com/yx_xie2007/blog/static/1024642532011101411940162/

一直以來,union都是個很少用到的東西,對于這些不常用的結構往往記不住。這次看書又看到了,還是學習一下吧。
一般在Windows API的一些數據結構中才能看到這個union,其實并不復雜。本質上來說和結構體是一樣的,但是從包裝的角度來看有差異。

1、union中可以定義多個成員,union的大小由最大的成員的大小決定。?
2、union成員共享同一塊大小的內存,一次只能使用其中的一個成員。?
3、對某一個成員賦值,會覆蓋其他成員的值(也不奇怪,因為他們共享一塊內存。但前提是成員所占字節數相同,當成員所占字節數不同時只會覆蓋相應字節上的值,比如對char成員賦值就不會把整個int成員覆蓋掉,因為char只占一個字節,而int占四個字節)

4、聯合體union的存放順序是所有成員都從低地址開始存放的。
下面看一個簡單的代碼:

?#include <stdio.h>
?
typedef union{
?char c;
?int a;
?int b;
}Demo;
?
int main(int argc, char **argv)
{
?Demo d;
?d.c = 'H';
?d.a = 10;
?d.b = 12;
?
?printf("size: %d\n", sizeof(d));
?printf("%c\t%d\t%d\n", d.c, d.a, d.b);
?
?return 0;
}

(轉)C語言union(聯合體 共用體) - 潛流 - pig在學習思考了

原創文章,轉載請注明:
本文出自程序人生?>>?C語言union(聯合體 共用體)

ps:紅色字體部分為本人添加。

轉載于:https://www.cnblogs.com/shirishiqi/p/5416935.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/257331.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/257331.shtml
英文地址,請注明出處:http://en.pswp.cn/news/257331.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

android 點對點語音,使用Android SIP Stack進行點對點SIP呼叫?

我一直被困在同樣的問題上.如果你可以在沒有android sip api的情況下制作它,你可以查看rtp api,它為你提供了一些較低級別的工具來制作P2P VOIP應用程序,而無需服務器.To support audio conferencing and similar usages, you need toinstantiate two classes as endpoints for…

拓撲排序

用兩種方式來實現 1、 深度優先搜索&#xff08;DFS&#xff09; 對有向圖采取深度優先搜索&#xff0c;并且在postVist處&#xff0c;打印所訪問的節點。最后打印出的字符序列的反序列正好滿足拓撲排序。&#xff08;可以在postVist&#xff08;&#xff09;方法中&#xff0c…

阿里啟動NASA計劃創造新經濟核心科技

本文講的是阿里啟動"NASA"計劃創造新經濟核心科技【IT168 資訊】2017年3月9日&#xff0c;阿里巴巴集團在杭州召開首屆技術大會&#xff0c;動員全球兩萬多名科學家和工程師投身“新技術戰略”。會議透露&#xff0c;阿里巴巴正在啟動一項代號“NASA”的計劃&#xf…

ORACLE創建表空間和用戶

--表空間 CREATE TABLESPACE sdt DATAFILE F:\tablespace\demo size 800M EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO; --索引表空間 CREATE TABLESPACE sdt_Index DATAFILE F:\tablespace\demo size 512M EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AU…

PHP-CGI, FastCGI, PHP-FPM的關系和區別

Web server(apache, nginx) 接受到一個php請求后要解析php文件, 怎么解析呢, web server是C語言寫的, 所以需要一個協議, 一個php解釋器, 也就是CGI. FastCGI是用來提高CGI性能的, 可以說是CGI的升級版. CGI每當一個請求過來都要開啟一個進程, 訪問結束再關閉一個進程, 太累. F…

android 6關閉防火墻,安卓手機如何關閉防火墻

我的安卓手機不想使用防火墻了!該如何關閉呢?下面由小編給你做出詳細的安卓手機關閉防火墻介紹!希望對你有幫助!安卓手機關閉防火墻方法一1、如果該防火墻不是系統自帶的&#xff0c;是你下載安裝的&#xff0c;就直接在設置選項中&#xff0c;選擇應用程序--管理應用程序&…

Powershell命令中的 CommonParameters是指什么

因為在命令中經常遇到這個參數&#xff0c;后來找了一下&#xff0c;有一個微軟的官方文檔&#xff0c;就不翻譯了&#xff0c;英文好的自己讀吧。https://docs.microsoft.com/zh-cn/powershell/module/microsoft.powershell.core/about/about_commonparameters?viewpowershel…

java日志之slf4j與logback簡單使用

最近在開發遇到日志是使用slf4j與logback.xml的配置&#xff0c;所以就記錄下來了。 1、導入這幾個jar包&#xff1a; Logback 分為三個模塊&#xff1a;logback-core&#xff0c;logback-classic&#xff0c;logback-access logback-core 是核心&#xff1b; logback-classic …

android one x3怎么樣,618旗艦手機怎么選,看完這篇文章,你就會知道

轉眼間&#xff0c;2021年即將過半&#xff0c;一年一度的年中購物狂歡節618就要到來了。我已經迫不及待了。畢竟在618年中大促的時候&#xff0c;各家廠商都有力度非常大的活動。而且也有很多小伙伴一直在觀望&#xff0c;想要在618的時候給自己換一款手機。說實話&#xff0c…

字符設備驅動程序框架

via&#xff1a;http://blog.chinaunix.net/uid-20672257-id-3142809.html 1、寫出open、write函數 2、告訴內核 1&#xff09;、定義一個struct file_operations結構并填充好 static struct file_operations first_drv_fops {.owner THIS_MODULE, /* 這是一個宏&…

華為鴻蒙與magic,如果榮耀Magic3搭載了屏下鏡頭和鴻蒙系統,你會做第一批嗎?...

華為榮耀在目前的手機市場中&#xff0c;榮耀手機的人氣還是蠻高的&#xff0c;從高端旗艦市場到中低端市場&#xff0c;我們都能夠看到榮耀手機的蹤影&#xff0c;這已經可以代表榮耀手機的優勢了。要知道華為榮耀這兩年的發展速度非常快&#xff0c;產品的布局速度也是如此&a…

第十九章 我國農村資金籌集

農村改革解說&#xff08;專著&#xff09;第十九章 第十九章 我國農村資金籌集 1、農村公共事業統籌經費怎樣確定&#xff1f; 總的原則是&#xff1a;制止對農民的不合理攤派&#xff0c;減輕農民的額外負擔&#xff0c;保證農村合理的公共事業經費。具體要求如下&#xff1a…

兩個Python web框架:Django Tornado比較

就是說它作為 web 框架比 Django 簡單&#xff0c;又支援異步 IO&#xff0c;且更不需要前端的 webserver ? 我已經混亂了&#xff0c; Tornado是 Nginx、Django、Node.js 的結合體&#xff1f;又或是 Nginx * 20% Django * 40% Node.js * 40% &#xff1f;你需要搞清楚幾個…

廣義動量定理之速度V的應用分析

廣義動量定理之速度V的應用分析 從廣義動量定理FαtnmV的角度說&#xff0c;改變速度V&#xff0c;就可以改變成果nmV。速度派以改變速度V作為其主要目的。 速度V應用于兵貴神速 理論簡介&#xff1a;三國時期曹操的謀士郭嘉說&#xff1a;“兵貴神速”。 孫子在九地篇中說“兵…

云安全聯盟發布更新版安全應用指南

本文講的是云安全聯盟發布更新版安全應用指南【IT168 資訊】云安全聯盟(CSA)本周四發布了云計算服務的第二版安全應用指南。這一非營利性質的聯盟正式成立于四月份&#xff0c;其目的是推進云計算安全的最佳實踐。他們在2009 RSA會議(全球信息安全領域最具權威的年度峰會)上發布…

[BZOJ1026] [SCOI2009] windy數 (數位dp)

Description windy定義了一種windy數。不含前導零且相鄰兩個數字之差至少為2的正整數被稱為windy數。 windy想知道&#xff0c;在A和B之間&#xff0c;包括A和B&#xff0c;總共有多少個windy數&#xff1f; Input 包含兩個整數&#xff0c;A B。 Output 一個整數 Sample Input…

JQuery ajax()實例

前端頁面&#xff1a; <!doctype html><html><head><meta charset"utf-8"><title>搜索</title></head> <body><div class"zgz">請輸入(A-Z):<input type"text" value"GET"&…

黑馬數據庫html階段考試,黑馬web階段web試題學生版.docx

Web 階段 Web 試題1. 動態網站的開發技術有 (A)JSPHTMLCSSJavaScript 下面哪個請求頭信息可以實現防盜鏈 (C)LocationRefreshRefererIf-Modified-Since在Web應用程序的文件與目錄結構中&#xff0c;是放置在(A )WEB-INF 目錄conf 目錄lib 目錄classes 目錄下面哪一個指明向客戶…

學生信息管理系統中遇到的問題解析

項目概述&#xff1a;做一個簡單的學生信息管理系統 要求&#xff1a;學生信息的增刪查改&#xff0c;成績的增刪。自動生成的編號。 工具&#xff1a;微軟企業庫與MiniUI 遇到的問題與解決方法&#xff1a;&#xff08;前面的博文也有類似的問題和解決方法&#xff0c;這里不再…

簡單地使用線程之一:使用異步編程模型

.NetFramework的異步編程模型從本質上來說是使用線程池來完成異步的任務&#xff0c;異步委托、HttpWebRequest等都使用了異步模型。 這里我們使用異步委托來說明異步編程模型。 首先&#xff0c;我們來明確一下&#xff0c;對于多線程來說&#xff0c;我們需要關注哪些問題。 …