結構體
結構體占用的內存大小,首先和編譯器的系統位數有關系,類似于CPU是 64 bits 還是 32 bits 的情形;其次,結構體需要考慮字節對齊的問題。
實際上占用的內存大小, 在 Linux 中可以 使用 sizeof 進行獲取,默認為字節對齊的大小。
聯合體
聯合體的參數共享同一個內存地址,所占的內存大小完全是由聯合體中參數類型決定字長,然后數據共享,內存共享等。
結構體和聯合體連用例子:
1、首先定義一個結構體,內部包含聯合體,如下;
#defineMAX_SOFTKEY_LEN4
typedefenum
{
ENUM_TRANSFER,
ENUM_CONFERENCE,
ENUM_ANSWER,
ENUM_HOLD,
}KeyType;
typedefstructtag_CallRecordInfo
{
charline;//currentrecordingline.
unsignedcharstate;//currentmachinestate.
unsignedshorttotal;//currenttotalusedlines.
KeyTypetype;
union
{
charTransferkey[MAX_SOFTKEY_LEN];//transferkeybuffer
charConferencekey[MAX_SOFTKEY_LEN];//conferencekeybuffer
charAnswerKey[MAX_SOFTKEY_LEN];//talkingkeybuffer
charHoldKey[MAX_SOFTKEY_LEN];//holdkeybuffer
}SoftKey;
}CallRecordInfo;
解釋如下結構體:
聯合體union表示公用一個4字節的內存,并且定義了一個聯合體變量SoftKey,這個 聯合體最大的好處就是在賦值或者清空時能夠直觀地清楚,不需要再引用聯 合體的參數。如: CallRecordInfoinfo; 對 info.SoftKey 的操作會影響聯合體內部參數的值,并且數值一致。也 就是說,我們只要對info.SoftKey進行賦值即可,然后聯合體內的參 數內容是一樣的。即: info.SoftKey=info.SoftKey.TransferKey.
2、結構體占用的內存大小 (作者的機器為 Ubuntu 18.04, sizeof(int) = 4 的機器)

3、整體代碼
#include
#include
#include
#defineMAX_SOFTKEY_LEN4
typedefenum
{
ENUM_TRANSFER,
ENUM_CONFERENCE,
ENUM_ANSWER,
ENUM_HOLD,
}KeyType;
typedefstructtag_CallRecordInfo
{
charline;//currentrecordingline.
unsignedcharstate;//currentmachinestate.
unsignedshorttotal;//currenttotalusedlines.
KeyTypetype;
union
{
charTransferkey[MAX_SOFTKEY_LEN];//transferkeybuffer
charConferencekey[MAX_SOFTKEY_LEN];//conferencekeybuffer
charAnswerKey[MAX_SOFTKEY_LEN];//talkingkeybuffer
charHoldKey[MAX_SOFTKEY_LEN];//holdkeybuffer
}SoftKey;
}CallRecordInfo;
CallRecordInfoRecordInfo;
voidSetSoftKeyValue(intstate,KeyTypetype,char*keybuf)
{
RecordInfo.state=state;
RecordInfo.type=type;
memset(&RecordInfo.SoftKey,0,MAX_SOFTKEY_LEN);
if(NULL!=keybuf)
{
memcpy(&RecordInfo.SoftKey,keybuf,MAX_SOFTKEY_LEN);
}
}
intmain(intargc,charconst*argv[])
{
charbuf[4]="123";
SetSoftKeyValue(0,ENUM_TRANSFER,buf);
printf("n%s---%lun",RecordInfo.SoftKey.Conferencekey,sizeof(CallRecordInfo));
return0;
}
4、結果

原文:https://blog.csdn.net/psr1999
文章來源于網絡,版權歸原作者所有,如有侵權,請聯系刪除。
審核編輯 黃宇
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
結構體
+關注
關注
1文章
131瀏覽量
11371
發布評論請先 登錄
相關推薦
熱點推薦
一個經典的結構體和聯合體共用的實例
Linux 中可以 使用 sizeof 進行獲取,默認為字節對齊的大小。
聯合體
聯合體的參數共享同一個內存地址,所占的內存大小完全是由聯合體中參數類型決定字長,然后數據共享,內存共享等。
發表于 12-16 07:14
浙江省腦機接口重大科技專項與創新聯合體將開啟,相關腦機接口立項國際標準啟動
來源:維度網-全球簡訊 ? 2025“智聯·未來”腦機接口國際會議暨第二屆中國腦機智能大會將于12月11日至12日舉行。會上,將舉行浙江省腦機接口重大科技專項與創新聯合體啟動儀式。 啟動浙江省腦機
中科曙光入選首批天津市卓越工程師培養聯合體成員單位
11月23日,天津市卓越工程師培養聯合體成立儀式暨天津大學國家卓越工程師學院高質量建設發展會議在天津大學北洋園校區隆重舉行。中科曙光作為聯合體首批成員單位受邀出席,總裁助理楊鴻軒代表企業參會,與政府、高校及產業界代表共同見證聯合體
開鴻智谷加入創新聯合體,共推先進制造業與人力資源服務融合發展
為深入貫徹人才強國與制造強國戰略,助力構建現代化產業體系,湖南湘江新區正式啟動“人力資源服務助力先進制造業高質量發展創新聯合體”(以下簡稱“創新聯合體”)建設工作,并于11月1日在長沙人力資源服務
C語言中結構體與聯合體的深度解析:內存布局與應用場景
在于對內存的極致操控。結構體構建數據實體,聯合體實現內存復用,二者的組合使用能創造出強大的數據結構。掌握它們的底層原理,配合內存分析工具(如Valgrind、GDB),將助你在嵌入式開
發表于 04-08 09:18
長沙新一代信息技術產教聯合體正式成立,拓維信息當選理事長單位
3月22日,“長沙新一代信息技術產教聯合體成立大會暨第一屆理事會議”在湖南商務職業技術學院隆重啟幕。會上,長沙新一代信息技術產教聯合體正式成立,拓維信息當選理事長單位,拓維信息旗下開鴻智谷當選
產教新篇|長沙新一代信息技術產教聯合體揚帆啟航!
在深化現代教育體系建設的主軸推動下,我國職業教育正以市域產教聯合體和行業產教融合共同體為雙翼,構建起教育鏈、人才鏈與產業鏈、創新鏈深度融合的新格局。2025年3月22日,“長沙新一代信息技術產教
經典 C 語言編程,結構體和聯合體如何共用?
評論