最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c語言中聯(lián)合體和枚舉用法詳解

 更新時間:2023年12月23日 16:06:30   作者:愛吃漢堡.  
結(jié)構(gòu)體、聯(lián)合體是C語言中的構(gòu)造類型,結(jié)構(gòu)體我們平時應(yīng)該都用得很多,下面這篇文章主要給大家介紹了關(guān)于c語言中聯(lián)合體和枚舉用法的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

一、聯(lián)合體

(1) 像結(jié)構(gòu)體?樣,聯(lián)合體也是由一個或者多個成員構(gòu)成,這些成員可以不同的類型。
(2)但是編譯器只為最大的成員分配足夠的內(nèi)存空間。聯(lián)合體的特點(diǎn)是所有成員共用同一塊內(nèi)存空間。所以聯(lián)合體也叫:共用體。
(3) 給聯(lián)合體其中?個成員賦值,其他成員的值也跟著變化。

1. 聯(lián)合體類型的聲明和創(chuàng)建

關(guān)鍵字:union

聲明:

#include <stdio.h>
//聯(lián)合類型的聲明
union Un// 類型名
{
	char c;//成員
	int i;
};
int main()
{
	union Un s = {0};//創(chuàng)建
	return 0;
}

2. 聯(lián)合體的特點(diǎn)

聯(lián)合的成員是共用同?塊內(nèi)存空間的,這樣?個聯(lián)合變量的大小,至少是最大成員的大?。ㄒ驗槁?lián)合至少得有能力保存最大的那個成員)。

//代碼1
#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;
 }

運(yùn)行結(jié)果:

它們的地址都是一樣的,說明它們共用一塊空間

我們再來舉一個例子

union Un
{
	char c;
	int i;
};
int main()
{
	//聯(lián)合變量的定義
	union Un un = { 0 };
	un.i = 0x11223344;
	printf("%x\n", un.i);
	un.c = 0x55;
	printf("%x\n", un.i);
	return 0;
}

運(yùn)行結(jié)果:

為什么結(jié)果不一樣呢?

是因為它們共用一塊空間,當(dāng) c 使用時就會改變 i 的值

內(nèi)存布局:

3. 聯(lián)合體大小的計算

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

如:

#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;
}

運(yùn)行結(jié)果:

當(dāng)遇到數(shù)組是我們只看類型如char c[5];->我們只看char的對齊數(shù),char的對齊數(shù)為1

第一個輸出結(jié)果

該類型的最大對齊數(shù)為4(int)

數(shù)組的大小為7,我們要保證它的大小,只能是最大對齊數(shù)的倍數(shù),所以是8

第二個輸出結(jié)果同理

4.總結(jié)

(1)使用聯(lián)合體是可以節(jié)省空間的

(2)使用聯(lián)合體的一個成員時就不要使用其他成員(因為其他成員的值會發(fā)生變化)

二、枚舉

1. 枚舉類型的聲明

關(guān)鍵字:enum

枚舉顧名思義就是??列舉。

把可能的取值??列舉。

比如我們現(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)容是枚舉類型的可能取值,也叫 枚舉常量 。

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

如:

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

2. 枚舉類型的優(yōu)點(diǎn)

為什么使用枚舉? 我們可以使用 #define 定義常量,為什么非要使用枚舉? 枚舉的優(yōu)點(diǎn):

增加代碼的可讀性和可維護(hù)性

和#define定義的標(biāo)識符?較枚舉有類型檢查,更加嚴(yán)謹(jǐn)。

便于調(diào)試,預(yù)處理階段會刪除 #define 定義的符號

使用方便,?次可以定義多個常量

枚舉常量是遵循作用域規(guī)則的,枚舉聲明在函數(shù)內(nèi),只能在函數(shù)內(nèi)使用

3. 枚舉類型的使用

enum Color//顏?
{
 RED=1,
 GREEN=2,
 BLUE=4
};
enum Color clr = GREEN;//使?枚舉常量給枚舉變量賦值

那是否可以拿整數(shù)給枚舉變量賦值呢?在C語言中是可以的,但是在C++是不?的,C++的類型檢查比較嚴(yán)格。

總結(jié) 

到此這篇關(guān)于c語言中聯(lián)合體和枚舉用法詳解的文章就介紹到這了,更多相關(guān)c語言聯(lián)合體和枚舉內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++獲取字符串最后一個單詞長度的多種方法

    C++獲取字符串最后一個單詞長度的多種方法

    在字符串處理中,獲取最后一個單詞的長度是一個常見問題,這個問題在文本處理、編譯原理、自然語言處理等領(lǐng)域都有廣泛應(yīng)用,本文將詳細(xì)介紹多種解決該問題的方法,并分析各自的優(yōu)缺點(diǎn),需要的朋友可以參考下
    2026-03-03
  • C++使用QTcreator創(chuàng)建動態(tài)庫流程

    C++使用QTcreator創(chuàng)建動態(tài)庫流程

    在工程中,經(jīng)常會根據(jù)不同的場景需求將類封裝成庫文件,本文主要介紹了C++使用QTcreator創(chuàng)建動態(tài)庫流程,具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • C語言實現(xiàn)逆波蘭式實例

    C語言實現(xiàn)逆波蘭式實例

    這篇文章介紹了C語言實現(xiàn)逆波蘭式實例,有需要的朋友可以參考一下
    2013-09-09
  • C++ 關(guān)于MFC List Control 控件的總結(jié)

    C++ 關(guān)于MFC List Control 控件的總結(jié)

    這篇文章主要介紹了C++ 關(guān)于MFC List Control 控件的總結(jié)的相關(guān)資料,十分的詳細(xì),有需要的朋友可以參考下
    2015-06-06
  • C語言 字符串首字母轉(zhuǎn)換成大寫簡單實例

    C語言 字符串首字母轉(zhuǎn)換成大寫簡單實例

    這篇文章主要介紹了C語言 字符串首字母轉(zhuǎn)換成大寫簡單實例的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • C++中的拷貝構(gòu)造詳解

    C++中的拷貝構(gòu)造詳解

    這篇文章主要為大家介紹了C++中的拷貝構(gòu)造,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • C語言實現(xiàn)數(shù)學(xué)表達(dá)式運(yùn)算

    C語言實現(xiàn)數(shù)學(xué)表達(dá)式運(yùn)算

    這篇文章主要為大家詳細(xì)介紹了c語言實現(xiàn)數(shù)學(xué)表達(dá)式運(yùn)算,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • matlab實現(xiàn)將table轉(zhuǎn)換為double

    matlab實現(xiàn)將table轉(zhuǎn)換為double

    在MATLAB中,使用table.Variables屬性可將表格轉(zhuǎn)換為double數(shù)組,該屬性返回所有變量數(shù)據(jù),示例中T包含兩個變量,轉(zhuǎn)換后得到數(shù)值數(shù)組,方便后續(xù)處理
    2025-09-09
  • C++ 關(guān)鍵字 inline詳細(xì)介紹

    C++ 關(guān)鍵字 inline詳細(xì)介紹

    這篇文章主要介紹了C++ 關(guān)鍵字 inline,有需要的朋友可以參考一下
    2014-01-01
  • shared_ptr線程安全性全面分析

    shared_ptr線程安全性全面分析

    正如boost文檔所宣稱的,boost為shared_ptr提供了與內(nèi)置類型同級別的線程安全性。這包括:1. 同一個shared_ptr對象可以被多線程同時讀取。2. 不同的shared_ptr對象可以被多線程同時修改成
    2013-09-09

最新評論

南昌市| 凭祥市| 资中县| 怀宁县| 通山县| 青海省| 襄樊市| 紫金县| 合肥市| 宜丰县| 鸡东县| 白银市| 临城县| 通山县| 新巴尔虎右旗| 北辰区| 名山县| 铜鼓县| 连山| 邓州市| 调兵山市| 曲松县| 区。| 永靖县| 耿马| 蓬莱市| 会同县| 海晏县| 车致| 冀州市| 抚州市| 涿鹿县| 贺兰县| 尉氏县| 池州市| 榆林市| 木里| 温宿县| 乐昌市| 永善县| 绵竹市|