該文章的上一篇文章:C/C++自定義類(lèi)型(1)-CSDN博客
個(gè)人主頁(yè):仍有未知等待探索_C語(yǔ)言疑難,數(shù)據(jù)結(jié)構(gòu),小項(xiàng)目-CSDN博客
專(zhuān)題分欄:C語(yǔ)言疑難_仍有未知等待探索的博客-CSDN博客
目錄
?
一、引言
二、枚舉
1、枚舉是什么
?2、枚舉的格式
3、枚舉類(lèi)型的初始化
4、枚舉類(lèi)型中常量的值?
5、枚舉類(lèi)型的使用?
6、枚舉類(lèi)型的優(yōu)勢(shì)?
?7、define的運(yùn)算
三、 聯(lián)合體
?1、聯(lián)合體是什么?
2、聯(lián)合體的格式
3、聯(lián)合體賦值
4、聯(lián)合體的大小?
一、引言
繼上篇文章講了結(jié)構(gòu)體和位段之后,接著來(lái)寫(xiě)枚舉類(lèi)型和聯(lián)合類(lèi)型。
二、枚舉
1、枚舉是什么
枚舉,顧名思義,就是將一些東西一一列舉出來(lái)、把可能的取值一一列舉。理解的話沒(méi)有那么的困難。
比如:
人的性別:男、女;
星期:星期一、星期二、星期三、星期四、星期五、星期六、星期日;
三原色:紅、綠、藍(lán);
...etc
?2、枚舉的格式
和結(jié)構(gòu)體的大體結(jié)構(gòu)是一樣的,不同的就是枚舉的關(guān)鍵字是enum。?在枚舉里面,對(duì)于常量的定義的末尾不要用分號(hào),要用逗號(hào)相連。
#include<stdio.h>
//建立一個(gè)關(guān)于性別的枚舉類(lèi)型
//如下結(jié)構(gòu)體的關(guān)鍵字是enum
// 標(biāo)簽字是Sex
//male,female,secret是常量,每個(gè)常量與一個(gè)常數(shù)相等
enum Sex
{
male,
female,
secret
};
int main()
{
return 0;
}
3、枚舉類(lèi)型的初始化
像下面一樣,可以對(duì)枚舉類(lèi)型中常量給賦值。?
#include<stdio.h>
//建立一個(gè)關(guān)于性別的枚舉類(lèi)型
//如下結(jié)構(gòu)體的關(guān)鍵字是enum
// 標(biāo)簽字是Sex
//male,female,secret是常量,每個(gè)常量與一個(gè)常數(shù)相等
enum Sex
{
male=1,
female=3,
secret=7
};
int main()
{
return 0;
}
4、枚舉類(lèi)型中常量的值?
根據(jù)上述的描述,一直在說(shuō)枚舉類(lèi)型中常量等于一個(gè)常數(shù)。但是,這個(gè)常數(shù)是電腦隨機(jī)出來(lái)的嗎?顯然不是,如果是的話,那我們不知道這個(gè)數(shù)是多少,怎么用呢。請(qǐng)往下看:
1、我們可以對(duì)其進(jìn)行初始化,讓其代表的值可以是我們自己認(rèn)為的值。
#include<stdio.h>
enum Sex
{
male=1,
female=3,
secret=7
};
int main()
{
printf("%d\n", male);
printf("%d\n", female);
printf("%d\n", secret);
return 0;
}
2、如果我們不賦初值的話,那他代表的值是多少?
從下面的圖片中也可以看出來(lái),如果不對(duì)其進(jìn)行初始化的時(shí)候,每個(gè)常量代表的值,從0開(kāi)始往下增1。
#include<stdio.h>
enum Sex
{
male,
female,
secret
};
int main()
{
printf("%d\n", male);
printf("%d\n", female);
printf("%d\n", secret);
return 0;
}
3、如果我只對(duì)第一個(gè)進(jìn)行初始化的話,會(huì)發(fā)生什么現(xiàn)象呢??
?當(dāng)只對(duì)第一個(gè)進(jìn)行初始化的時(shí)候,接下來(lái)的常量的值自增1。
#include<stdio.h>
enum Sex
{
male=3,
female,
secret
};
int main()
{
printf("%d\n", male);
printf("%d\n", female);
printf("%d\n", secret);
return 0;
}
4、如果我要是對(duì)中間的枚舉常量賦值,又會(huì)發(fā)生什么現(xiàn)象呢??
對(duì)中間的female進(jìn)行初始化,只會(huì)影響下面的常量的取值,取值為初始化的自增1。
而其上面的常量則是不會(huì)受影響,依然從第一個(gè)常量值為0開(kāi)始,自增1。?
#include<stdio.h>
enum Sex
{
male,
female=5,
secret
};
int main()
{
printf("%d\n", male);
printf("%d\n", female);
printf("%d\n", secret);
return 0;
}
5、枚舉類(lèi)型的使用?
枚舉類(lèi)型的變量只能由枚舉類(lèi)型里面的常量來(lái)賦值。?
#include<stdio.h>
enum Sex
{
male,
female,
secret
};
int main()
{
//創(chuàng)建一個(gè)性別的枚舉類(lèi)型的變量
//枚舉類(lèi)型的變量只能由枚舉類(lèi)型里面的常量來(lái)賦值
enum Sex sex=male;
//sex=3;//錯(cuò)誤,sex是枚舉類(lèi)型,而3是整型,類(lèi)型不匹配
return 0;
}
6、枚舉類(lèi)型的優(yōu)勢(shì)?
大家可能都會(huì)有疑惑。define也能定義的常量,為什么還需要一個(gè) 枚舉類(lèi)型呢?
define | 枚舉類(lèi)型 |
一次只能定義一個(gè)常量 | 一次能定義多個(gè)常量 |
define運(yùn)算僅滿(mǎn)足替代原則 | 枚舉類(lèi)型里的常量和定義的變量運(yùn)算無(wú)異 |
?7、define的運(yùn)算
define定義的常量的運(yùn)算的原則是替代原則。?
如果根據(jù)我們自己的理解,我們一開(kāi)始會(huì)認(rèn)為變量m,n的值是一樣的,均為10200,而事實(shí)卻非如此。?
那編譯器上的數(shù)是怎么來(lái)的呢?
#include<stdio.h>
#define a 100
#define b 2
#define c a+b
int main()
{
int m,n;
m = c * a;
n = a * c;
printf("%d\n%d", m,n);
return 0;
}
三、 聯(lián)合體
?1、聯(lián)合體是什么?
聯(lián)合體也是一種特殊的結(jié)構(gòu)體類(lèi)型,也有一系列的成員。其特點(diǎn)就是所有成員共用一塊空間。
2、聯(lián)合體的格式
#include<stdio.h>
union s
{
char a;
int b;
};
int main()
{
union s S;
return 0;
}
3、聯(lián)合體賦值
#include<stdio.h>
union s
{
char a;
int b;
};
int main()
{
union s S;
S.a = 1;
S.b = 2;
return 0;
}
4、聯(lián)合體的大小?
1、聯(lián)合的大小至少是最大成員的大小。
2、當(dāng)最大成員大小不是最大對(duì)齊數(shù)的整數(shù)倍的時(shí)候,就要對(duì)齊到最大對(duì)齊數(shù)的整數(shù)倍
#include<stdio.h>
union s
{
char a;
int b;
};
int main()
{
printf("%d", sizeof(union s));
return 0;
}
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-720179.html
?謝謝大家的支持!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-720179.html
到了這里,關(guān)于C/C++自定義類(lèi)型(2)細(xì)節(jié)滿(mǎn)滿(mǎn)!的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!