精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

一個經典的結構體和聯合體共用實例

工程師進階筆記 ? 來源:CSDN技術社區 ? 2023-05-04 11:49 ? 次閱讀

結構體

結構體占用的內存大小,首先和編譯器的系統位數有關系,類似于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 的機器)

9284f1a2-e79b-11ed-ab56-dac502259ad0.png

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("
%s---%lu
",RecordInfo.SoftKey.Conferencekey,sizeof(CallRecordInfo));
return0;
}

4、結果

92920694-e79b-11ed-ab56-dac502259ad0.png

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10826

    瀏覽量

    211160
  • Linux
    +關注

    關注

    87

    文章

    11230

    瀏覽量

    208932
  • 內存
    +關注

    關注

    8

    文章

    3002

    瀏覽量

    73887
  • 編譯器
    +關注

    關注

    1

    文章

    1618

    瀏覽量

    49052
  • 結構體
    +關注

    關注

    1

    文章

    130

    瀏覽量

    10833

原文標題:一個經典的結構體和聯合體共用實例

文章出處:【微信號:工程師進階筆記,微信公眾號:工程師進階筆記】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    430編程C語言常識(IAR)之結構聯合體

    ,aa.d地址為N+1,是奇數地址,因為430在奇數地址只能讀取一個字節,因此要訪問d成員需要讀取兩次才能完成,后果是代碼變長、速度變慢。  三. 匿名結構
    發表于 11-22 15:43

    DLL導入結構 聯合體

    DLL函數參數中,有結構聯合體結構中使用聯合體,這種方式的函數怎么使用LABVIEW導入
    發表于 09-06 10:32

    聯合體問題

    union U1{INT8Uax[4];FP32 fx;INT32Slx;INT32Uulx;INT16Six;INT16Uuix;INT8Scx;INT8Uucx;};U1 X_rom;//申請聯合接口數據變量定義如上的
    發表于 01-04 12:13

    如何定義了這個聯合體

    我先定義聯合體數據類型,然后接著定義了聯合體變量,定義聯合體部分如下:我在sys_con
    發表于 07-12 04:28

    為什么位域結構聯合體起使用?

    /*本例程是C語言的位域操作示例這里為什么位域結構聯合體起使用?-->因為這樣定義后,即可以單獨使用標志位 也可同時使用整個字節數據主要應用:單片機C語言好處:用標志位可以節省R
    發表于 07-14 06:23

    結構共用的區別

    語言中,還有另外種和結構非常類似的語法,叫做共用(Union),它的定義格式為:union 共用
    發表于 07-20 06:57

    結構聯合體的區別到底在哪里

    在單片機軟件編程中,結構和枚舉類型都很常用到,聯合體相對來用的就比較少。那么結構聯合體的區
    發表于 11-22 07:54

    如何利用聯合體去判斷大小端呢

    轉載,如若侵權,請聯系本人刪除。聯合體定義聯合體結構樣都是自定義類型。聯合體也包含
    發表于 12-15 07:21

    聯合體/共用的使用方法

    大家好,我是ZhengN。本次給分享聯合體些知識。聯合體/共用的使用 C語言中,聯合體/
    發表于 02-28 10:05

    結構struct和聯合體union的區別?

    結構struct和聯合體union的區別?
    發表于 10-11 08:21

    C語言:結構聯合體嵌套使用的實用操作

    。 定義聯合類型的般形式為: 成員表中含有若干成員,成員的般形式為:類型說明符 成員名。其占用的字節數與成員中最大數據類型占用的字節
    的頭像 發表于 12-24 16:07 ?5452次閱讀
    C語言:<b class='flag-5'>結構</b><b class='flag-5'>體</b>、<b class='flag-5'>聯合體</b>嵌套使用的實用操作

    什么是C語言的聯合體

    名{ 成員列表 }; 共用有時也被稱為聯合或者聯合體,這也是 Union 這個單詞的本意。 結構
    的頭像 發表于 07-29 15:35 ?3681次閱讀
    什么是C語言的<b class='flag-5'>聯合體</b>

    關于數字硬件建模SystemVerilog聯合體

    聯合體可以有多個數據類型表示的單個存儲元素,聯合體的聲明類似結構,但推斷出的硬件非常不同
    的頭像 發表于 07-07 09:05 ?964次閱讀

    c語言中結構聯合體的區別

    結構聯合體是C語言中的構造類型,結構我們平時應該都用得很多。但是,對于聯合體
    的頭像 發表于 12-03 14:25 ?2463次閱讀
    c語言中<b class='flag-5'>結構</b><b class='flag-5'>體</b>有<b class='flag-5'>聯合體</b>的區別

    經典 C 語言編程,結構聯合體如何共用

    中可以 使用 sizeof 進行獲取,默認為字節對齊的大小。 聯合體 聯合體的參數共享同一個內存地址,所占的內存大小完全是由聯合體中參數類型決定字長,然后數據共享,內存共享等。
    的頭像 發表于 01-11 18:24 ?1265次閱讀
    <b class='flag-5'>經典</b> C 語言編程,<b class='flag-5'>結構</b><b class='flag-5'>體</b>和<b class='flag-5'>聯合體</b>如何<b class='flag-5'>共用</b>?