国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【C語言】聯(lián)合體和枚舉

這篇具有很好參考價值的文章主要介紹了【C語言】聯(lián)合體和枚舉。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

這篇博客就把剩下的兩個自定義類型聯(lián)合體和枚舉好好總結(jié)一下,讓我們好好看看聯(lián)合體和枚舉到底是什么

個人主頁:小張同學(xué)zkf

若有問題 評論區(qū)見

感興趣就關(guān)注一下吧

【C語言】聯(lián)合體和枚舉,c語言,c語言,開發(fā)語言

目錄

?1. 聯(lián)合體

1.1 聯(lián)合體類型的聲明

?1.2 聯(lián)合體的特點

?1.3 相同成員的結(jié)構(gòu)體和聯(lián)合體對比

?1.4 聯(lián)合體大小的計算

2. 枚舉類型

2.1 枚舉類型的聲明

2.2 枚舉類型的優(yōu)點

?2.3 枚舉類型的使用

?


?1. 聯(lián)合體

1.1 聯(lián)合體類型的聲明

像結(jié)構(gòu)體一樣,聯(lián)合體也是由一個或者多個成員構(gòu)成,這些成員可以不同的類型。
但是編譯器只為最大的成員分配足夠的內(nèi)存空間。聯(lián)合體的特點是所有成員共用同一塊內(nèi)存空間。所以聯(lián)合體也叫:共用體。
給聯(lián)合體其中一個成員賦值,其他成員的值也跟著變化。
# include <stdio.h>
// 聯(lián)合類型的聲明
union Un
{
char c;
int i;
};
int main ()
{
// 聯(lián)合變量的定義
union Un un = { 0 };
// 計算連個變量的??
printf ( "%d\n" , sizeof (un));
return 0 ;
}

輸出結(jié)果:4

【C語言】聯(lián)合體和枚舉,c語言,c語言,開發(fā)語言

由圖可見他們倆共處一個空間,所以字節(jié)長度為最大的類型int

?1.2 聯(lián)合體的特點

聯(lián)合的成員是共用同一塊內(nèi)存空間的,這樣一個聯(lián)合變量的大小,至少是最大成員的大(因為聯(lián)合
至少得有能力保存最大的那個成員)。
# include <stdio.h>
// 聯(lián)合類型的聲明
union Un
{
char c;
int i;
};
int main ()
{
// 聯(lián)合變量的定義
union Un un = { 0 };
un.i = 0x11223344 ;
un.c = 0x55 ;
printf ( "%x\n" , un.i);
return 0 ;
}

輸出結(jié)果:11223355

【C語言】聯(lián)合體和枚舉,c語言,c語言,開發(fā)語言

由圖可知是將最低位由于聯(lián)合體的特點,覆蓋成c的55。

那我們想一下,既然c和i共處一室,它們的地址會一樣嗎?

【C語言】聯(lián)合體和枚舉,c語言,c語言,開發(fā)語言

我們試一下

# include <stdio.h>
// 聯(lián)合類型的聲明
union Un
{
char c;
int i;
};
int main ()
{
// 聯(lián)合變量的定義
union Un un = { 0 };
// 下?輸出的結(jié)果是?樣的嗎?
printf ( "%p\n" , &(un.i));
printf ( "%p\n" , &(un.c));
printf ( "%p\n" , &un);
return 0 ;
}

輸出結(jié)果:

001 AF85C
001 AF85C
001 AF85C

可見輸出結(jié)果一樣,這也就說明聯(lián)合體地址和里面每個成員名的地址是一樣的

?1.3 相同成員的結(jié)構(gòu)體和聯(lián)合體對比

我們再對比一下相同成員的結(jié)構(gòu)體和聯(lián)合體的內(nèi)存布局情況。
struct S? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
{
char c;
int i;
};
struct S s = { 0 };?
?
union Un
{
char c;
int i;
};
union Un un = { 0 };

【C語言】聯(lián)合體和枚舉,c語言,c語言,開發(fā)語言

聯(lián)合體相較于結(jié)構(gòu)體可以節(jié)省空間,但是它會出現(xiàn)成員與成員覆蓋的情況?

?1.4 聯(lián)合體大小的計算

?我們了解了聯(lián)合體在內(nèi)存中的布局,那聯(lián)合體的字節(jié)大小到底怎么計算那

我們首先要知道:

? 聯(lián)合的大小至少是最大成員的大小 。
? 當(dāng)最大成員大小不是最大對齊數(shù)的整數(shù)倍的時候,就要對齊到最大對齊數(shù)的整數(shù)倍。

【C語言】聯(lián)合體和枚舉,c語言,c語言,開發(fā)語言

我們來看一個代碼加深理解
# include <stdio.h>
union Un1
{
char c[ 5 ];
int i;
};
union Un2
{
short c[ 7 ];
int i;
};
int main ()
{
// 下?輸出的結(jié)果是什么?
printf ( "%d\n" , sizeof ( union Un1));
printf ( "%d\n" , sizeof ( union Un2));
return 0 ;
}

我們先分析un1,根據(jù)前面博客分析的結(jié)構(gòu)體而言,char的最大對齊數(shù)是1,int的最大對齊數(shù)為4,所以這個聯(lián)合體的最大對齊數(shù)為4,聯(lián)合體至少也是最大成員的空間,成員中最大的空間是char c[5],為5,5不是4的倍數(shù),所以對齊到8的位置,就是8;再看un2,un2至少為14個字節(jié)吧,short和int的對齊數(shù)分別為2和4,所以最大對齊數(shù)為4,14不是4的倍數(shù),所以要對齊到16的位置,大小為16。

我們認識了聯(lián)合體,那我們是不是又有一種巧妙的方式判斷大小端了

int check_sys ()
{
union
{
int i;
char c;
}un;
un.i = 1 ;
return un.c; // 返回 1 是?端,返回 0 是?端
}

既然char成員占據(jù)低地址處的位置,那此時i為1,返回c,正好可以直接判斷這個位置上的數(shù)字。?


2. 枚舉類型

枚舉是 C 語言中的一種基本數(shù)據(jù)類型,用于定義一組具有離散值的常量

2.1 枚舉類型的聲明

枚舉顧名思義就是一 一列舉。
把可能的取值一 一列舉。
比如我們現(xiàn)實生活中:
一周的星期一到星期日是有限的7天,可以一 一列舉
性別有:男、女、保密,也可以??列舉
月份有12個月,也可以??列舉
三原色,也是可以一 一列舉

?這些數(shù)據(jù)的表示就可以使用枚舉了。

enum Day // 星期
{
Mon,
Tues,
Wed,
Thur,
Fri,
Sat,
Sun
};
enum Sex // 性別
{
MALE,
FEMALE,
SECRET
} ;
enum Color // 顏?
{
RED,
GREEN,
BLUE
};
以上定義的 enum Day , enum Sex , enum Color 都是 枚舉類型 。
{}中的內(nèi)容是枚舉類型的可能取值,也叫 枚舉常量 。

這些可能取值都是有值的,默認從0開始,依次遞增1,當(dāng)然在聲明枚舉類型的時候也可以賦初值。

比如:

enum Color // 顏?
{
RED= 2 ,
GREEN= 4 ,
BLUE= 8
};

若不賦初值

enum Color // 顏?
{
RED ,//0
GREEN ,//1
BLUE//2
};

那里面的常量值就默認從0開始依次加一

若中間賦初值

enum Color // 顏?
{
RED ,//0
GREEN ,//1
BLUE=8,//8
YELLOW//9
};

可見剛開始不賦初值的時候,依然從零開始依次加一,從哪開始賦初值,就從這個初值的基礎(chǔ)上依次加一。

2.2 枚舉類型的優(yōu)點

這時肯定有人會想定義常量的話,那我們可以用#define宏定義呀,為什么會有枚舉這東西那

相比#define枚舉可以調(diào)試,而#define在調(diào)試時會直接在預(yù)處理階段替換。

我們來看一下枚舉的優(yōu)點就知道了

枚舉的優(yōu)點:
1. 增加代碼的可讀性和可維護性
2. 和#define定義的標(biāo)識符比較枚舉有類型檢查,更加嚴謹。
3. 便于調(diào)試,預(yù)處理階段會刪除 #define 定義的符號
4. 使用方便,一次可以定義多個常量
5. 枚舉常量是遵循作用域規(guī)則的,枚舉聲明在函數(shù)內(nèi),只能在函數(shù)內(nèi)使用

?2.3 枚舉類型的使用

enum Color // 顏?
? {
?RED= 1 ,
?GREEN= 2 ,
?BLUE= 4
? };
? enum Color clr = GREEN;
那是否可以拿整數(shù)給枚舉變量賦值呢?在C語言中是可以的,但是在C++是不行的,C++的類型檢查比較嚴格。

結(jié)束語

枚舉和聯(lián)合體總結(jié)完了,這兩個和上一篇的結(jié)構(gòu)體都可以用typedef關(guān)鍵字重命名,好了全部自定義類型總結(jié)完了

OK,感謝觀看

【C語言】聯(lián)合體和枚舉,c語言,c語言,開發(fā)語言【C語言】聯(lián)合體和枚舉,c語言,c語言,開發(fā)語言?【C語言】聯(lián)合體和枚舉,c語言,c語言,開發(fā)語言文章來源地址http://www.zghlxwxcb.cn/news/detail-851332.html

到了這里,關(guān)于【C語言】聯(lián)合體和枚舉的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【C語言】位段,枚舉和聯(lián)合體詳解

    【C語言】位段,枚舉和聯(lián)合體詳解

    ? 目錄 1.位段 1.1 什么是位段 1.2 位段的內(nèi)存分配 1.3 位段的跨平臺問題 2.枚舉 2.1 枚舉類型的定義 2.2 枚舉的優(yōu)點 3. 聯(lián)合(共用體) 3.1 聯(lián)合類型的定義 3.2 聯(lián)合的特點 3.3 聯(lián)合大小的計算 位段的聲明和結(jié)構(gòu)體是類似的,有兩個不同: 1.位段的成員必須是 int、unsigned int 或 sig

    2024年02月11日
    瀏覽(18)
  • C語言 聯(lián)合體驗證 主機字節(jié)序 +枚舉

    C語言 聯(lián)合體驗證 主機字節(jié)序 +枚舉

    枚舉(Enumeration)是一種在編程語言中表示一組具名 常量 的數(shù)據(jù)類型。 枚舉常常用于定義一組相關(guān)的離散值,比如顏色、星期幾、月份等。 愛編程的大丙

    2024年02月04日
    瀏覽(21)
  • C語言中的聯(lián)合體和枚舉

    C語言中的聯(lián)合體和枚舉

    ? ? ? ?聯(lián)合體的是union 除了和結(jié)構(gòu)體不一樣之外,聯(lián)合體的創(chuàng)建語法形式和結(jié)構(gòu)體的很相似,如果不熟悉結(jié)構(gòu)體的創(chuàng)建,可以看一下我上一篇的博客關(guān)于結(jié)構(gòu)體知識的詳解。 ? ? ? ?聯(lián)合體的成員是共用一塊內(nèi)存空間的,這也就是意味著它更節(jié)省空間,那也就

    2024年04月10日
    瀏覽(24)
  • c語言->自定義類型聯(lián)合體和枚舉類型

    c語言->自定義類型聯(lián)合體和枚舉類型

    文章目錄 ?作者簡介:大家好,我是橘橙黃又青,一個想要與大家共同進步的男人???? ??個人主頁:橘橙黃又青_C語言,函數(shù),指針-CSDN博客 目的:學(xué)習(xí)聯(lián)合體和枚舉類型的聲明聯(lián)合體的特點和大小,枚舉類型的有點和使用。 像結(jié)構(gòu)體?樣,聯(lián)合體也是由?個或者多個成員構(gòu)

    2024年02月05日
    瀏覽(24)
  • C語言從入門到實戰(zhàn)——聯(lián)合體和枚舉

    C語言從入門到實戰(zhàn)——聯(lián)合體和枚舉

    C語言中,聯(lián)合體(union)是一種特殊的數(shù)據(jù)類型,允許存儲不同類型的數(shù)據(jù)在同一塊內(nèi)存空間中。聯(lián)合體的大小取決于其中最大的成員的大小,共享同一塊內(nèi)存空間的成員可以存儲不同類型的數(shù)據(jù)。 聯(lián)合體的定義方式與結(jié)構(gòu)體類似,使用 union ,后跟聯(lián)合體的名稱。聯(lián)

    2024年01月17日
    瀏覽(18)
  • C語言——自定義類型詳解[結(jié)構(gòu)體][枚舉][聯(lián)合體]

    C語言——自定義類型詳解[結(jié)構(gòu)體][枚舉][聯(lián)合體]

    我打算把結(jié)構(gòu)體、枚舉、聯(lián)合體的重點內(nèi)容總結(jié)一下,方便后期復(fù)習(xí)的時候能夠更快,更準確的去拾取遺忘的知識。也希望能給大家起到借鑒的作用,不足的地方,請多多包涵。(不足的地方,也希望大家能夠指出來) 結(jié)構(gòu)體是一些值的集合,這些集合稱為成員變量,結(jié)構(gòu)體

    2024年02月13日
    瀏覽(24)
  • 【C語言】自定義類型的詳細講解2(枚舉類型、聯(lián)合體類型)

    【C語言】自定義類型的詳細講解2(枚舉類型、聯(lián)合體類型)

    目錄 1.枚舉 1.1枚舉優(yōu)點 2.聯(lián)合(共用體) 2.1聯(lián)合體的應(yīng)用 2.2聯(lián)合體的存放 上一篇文章與大家分享并深度討論研究了自定義類型中結(jié)構(gòu)體和位段的內(nèi)容,那么今天繼續(xù)研究枚舉和聯(lián)合體的內(nèi)容,希望對你有所幫助 枚舉類型顧名思義就是一一列舉。 把可能的取值一一列舉出來

    2023年04月18日
    瀏覽(24)
  • C語言中的“三體”大佬們知道是什么嗎? —— 結(jié)構(gòu)體、枚舉、聯(lián)合體

    目錄 前言 結(jié)構(gòu)體 基本概念 結(jié)構(gòu)體類型的聲明 結(jié)構(gòu)的聲明 特殊的聲明 結(jié)構(gòu)的自引用 結(jié)構(gòu)體變量的定義和初始化 結(jié)構(gòu)體的對齊規(guī)則: 為什么要內(nèi)存對齊 修改默認對齊數(shù) 修改默認對齊數(shù)的預(yù)處理命令 實際例子 結(jié)構(gòu)體傳參 結(jié)構(gòu)體實現(xiàn)位段(位段的填充) 位段 什么是位段 位

    2024年02月12日
    瀏覽(33)
  • 探索C語言中的聯(lián)合體與枚舉:數(shù)據(jù)多面手的完美組合!

    探索C語言中的聯(lián)合體與枚舉:數(shù)據(jù)多面手的完美組合!

    ? ?? 歡迎大家來到貝蒂大講堂?? ????養(yǎng)成好習(xí)慣,先贊后看哦~???? 所屬專欄:C語言學(xué)習(xí) 貝蒂的主頁:Betty‘s blog 聯(lián)合體 又叫 共用體 ,它是一種特殊的數(shù)據(jù)類型,允許您在 相同的內(nèi)存位置存儲不同的數(shù)據(jù)類型 。給聯(lián)合體其中?個成員賦值,其他成員的值也跟著變

    2024年02月19日
    瀏覽(19)
  • 一篇博客學(xué)會系列(2)—— C語言中的自定義類型 :結(jié)構(gòu)體、位段、枚舉、聯(lián)合體

    一篇博客學(xué)會系列(2)—— C語言中的自定義類型 :結(jié)構(gòu)體、位段、枚舉、聯(lián)合體

    目錄 ?前言 1、結(jié)構(gòu)體 1.1、結(jié)構(gòu)體類型的聲明 1.2、特殊的結(jié)構(gòu)體類型聲明 1.3、結(jié)構(gòu)體的自引用 1.4、結(jié)構(gòu)體的定義和初始化 1.5、結(jié)構(gòu)體成員變量的調(diào)用 1.6、結(jié)構(gòu)體內(nèi)存對齊? 1.6.1、offsetof 1.6.2、結(jié)構(gòu)體大小的計算 1.6.3、為什么存在內(nèi)存對齊?? 1.7、?修改默認對齊數(shù) 1.8、結(jié)構(gòu)

    2024年02月08日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包