[c/c++] _ 三類(lèi)自定義類(lèi)型:結(jié)構(gòu)體,共用體(聯(lián)合),枚舉類(lèi)型

c語(yǔ)言中的基本并不能滿(mǎn)足我們?nèi)粘J褂?這在其他面向?qū)ο蟮慕鉀Q方式是采用類(lèi)定義的方式解決,那么在c語(yǔ)言中,giant如何解決這個(gè)問(wèn)題,c語(yǔ)言中同樣提供有自定義類(lèi)型,太滿(mǎn)足用戶(hù)的需求,就是三類(lèi)自定義類(lèi)型:枚舉類(lèi)型,結(jié)構(gòu)體類(lèi)型,和共用體類(lèi)型.

  • 枚舉類(lèi)型.
    十分好理解,在c++中也繼承了這一點(diǎn),并且枚舉類(lèi)型也是經(jīng)常使用到的.

枚舉類(lèi)型主要的使用場(chǎng)景就是所有狀態(tài)都可以枚舉出來(lái)的場(chǎng)景.這個(gè)時(shí)候就可以通過(guò)枚舉類(lèi)型來(lái)定義這種類(lèi)型,比如一場(chǎng)球賽的狀態(tài):結(jié)束,正在進(jìn)行中,就可以使用枚舉類(lèi)型來(lái)自定義:

枚舉類(lèi)型使用enum關(guān)鍵字:

enum Gamestatus{PLAY,GAMEOVER}
int a;
Gamestatus game = PLAY;
a=game;

列舉了比賽的兩種狀態(tài).值得注意的是,枚舉類(lèi)型實(shí)際上是使用int來(lái)存儲(chǔ)的,所以可以使用enum類(lèi)型來(lái)初始化int變量,但是不能使用int值初始化enum類(lèi)型變量.
枚舉類(lèi)型十分適合使用在例如權(quán)限設(shè)置上,和switch多路分支結(jié)構(gòu)配合使用.
當(dāng)然枚舉類(lèi)型也有一些函數(shù),能夠?qū)崿F(xiàn)一些簡(jiǎn)單的功能.這里就不細(xì)說(shuō)了.

  • 結(jié)構(gòu)體
    現(xiàn)實(shí)生活中,很多類(lèi)型都有著復(fù)雜的屬性,比如一個(gè)人,用什么類(lèi)型來(lái)描述一個(gè)人呢.這在面向?qū)ο蟮木幊趟枷胫泻芎美斫?但在c語(yǔ)言中,是通過(guò)結(jié)構(gòu)體類(lèi)型,來(lái)自定義這種具有復(fù)雜結(jié)構(gòu)的類(lèi)型.

結(jié)構(gòu)體的定義使用關(guān)鍵字struct:

struct 結(jié)構(gòu)體名{
成員列表
}

//定義書(shū)這種類(lèi)型
struct Book
{
    char name[20];
    char author[10];
    char publish[20];
    double price;
};

成員列表由數(shù)據(jù)類(lèi)型和成員名構(gòu)成.

比較有趣的是,結(jié)構(gòu)體也可以嵌套使用:

struct data{
int year;
int month;
int day;
};
struct student{
int num;
char name[20];
char sex;
struct data birthday;
float score;
};
struct student{
int num;
char name[20];
char sex;
struct data{
  int year;
  int month;
  int day;
}birthday;
float score;
};

聲明結(jié)構(gòu)體變量:
可以先定義,后聲明,也可以便定義邊聲明,主要還是使用的先定義后聲明的方式:

struct Book
{
    char name[20];
    char author[10];
    char publish[20];
    double price;
};

int main()
{
    Book book1, book2;

結(jié)構(gòu)體成員的引用:
book1.name

void Structbook(){
    Book book;
    gets_s(book.name);
    book.author="xiaoshe";
    book.price = 34.6;
    printf("%s,%s", book.name, book.author);
}

初始化:

void Structbook(){
    Book book;
    Book book2 = { "wagnhua","xiaoshe","chuban",6.345 };
    gets_s(book.name);
    book.author="xiaoshe";
    book.price = 34.6;
    printf("%s,%s\n", book.name, book.author);
    printf("%s,%s,%f\n", book2.name, book2.author,book2.price);
}
圖片.png
  • 結(jié)構(gòu)體數(shù)組
void Structbook(){
    Book book;
    Book book2 = { "wagnhua","xiaoshe","chuban",6.345 };
    Book b[3]= { {"fg","sdfg","dfsg",34.5},{"fg","sdfg","dfsg",34.5},{"fg","sdfg","dfsg",34.5} };
    b[1] = { "fg","sdfg","dfsg",34.5 };
  • 結(jié)構(gòu)體指針(就相當(dāng)于普通的指針,只不過(guò)類(lèi)型是自定義的而已)

Book *book;

通過(guò)結(jié)構(gòu)體在指針訪(fǎng)問(wèn)結(jié)構(gòu)體變量:

*book.name ="sdf";
*book->name = "啥";

  • 指向結(jié)構(gòu)體數(shù)組的指針相當(dāng)于指向與結(jié)構(gòu)體數(shù)組的首個(gè)結(jié)構(gòu)體的首地址
Book book[5],*b;
b=book;
// 相當(dāng)于
p=&book[0];
  • 結(jié)構(gòu)體指針作為函數(shù)參數(shù)

使用指針可以實(shí)現(xiàn)數(shù)據(jù)值的雙向傳遞:

//排序函數(shù)
void sort(Student *stu,int n) {

    Student t;
    // 雙重for循環(huán)實(shí)現(xiàn)排序
    for (int j = 0; j < n; j++)
    {
        for (int i = 0; i < n - j;i++) {
            if (stu[i].score<stu[i+1].score)
            {
                t = stu[i];
                stu[i] = stu[i+1];
                stu[i+1] = t;
            }
        }
    }
}

void output(Student *stu,int n){
    int i;
    printf("student info are following:\n");
    for (i = 0; i < n;i++,stu++) {
        printf("%d\t%-20s\t%c\t%.2f%\t\n",stu->num,stu->name,stu->sex,stu->score);
    }
}

int main()
{
    // EnumSwith(WIN);
    // Structbook();
    Student*pstu, stu[4] = {
        {1011,"we hua",'M',84},
        {1011," huamei",'F',82},
        {1011,"we hua",'M',80},
        {1011,"we hua",'F',86},
    };
    pstu = stu;
    sort(pstu, 4);
    output(pstu, 4);
}
圖片.png

  • 共用體,聯(lián)合體類(lèi)型

共用體和結(jié)構(gòu)體的使用是類(lèi)似的,只不過(guò)共用體的成員在分配內(nèi)存空間的時(shí)候,是共用同一片內(nèi)存空間的.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末识腿,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子苛谷,更是在濱河造成了極大的恐慌腹殿,老刑警劉巖例书,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件决采,死亡現(xiàn)場(chǎng)離奇詭異树瞭,居然都是意外死亡爱谁,警方通過(guò)查閱死者的電腦和手機(jī)管行,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)捐顷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)迅涮,“玉大人叮姑,你說(shuō)我怎么就攤上這事据悔〖牵” “怎么了菠隆?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵骇径,是天一觀的道長(zhǎng)破衔。 經(jīng)常有香客問(wèn)我运敢,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮泰佳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘睬捶。我一直安慰自己近刘,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布介劫。 她就那樣靜靜地躺著案淋,像睡著了一般踢京。 火紅的嫁衣襯著肌膚如雪瓣距。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音慨默,去河邊找鬼弧腥。 笑死管搪,一個(gè)胖子當(dāng)著我的面吹牛更鲁,可吹牛的內(nèi)容都是我干的澡为。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼谷徙,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼完慧!你這毒婦竟也來(lái)了屈尼?” 一聲冷哼從身側(cè)響起鸿染,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蚕冬,沒(méi)想到半個(gè)月后囤热,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體旁蔼,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了祟同。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晕城。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡暇矫,死狀恐怖择吊,靈堂內(nèi)的尸體忽然破棺而出几睛,到底是詐尸還是另有隱情所森,我是刑警寧澤焕济,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站上鞠,受9級(jí)特大地震影響芍阎,放射性物質(zhì)發(fā)生泄漏谴咸。R本人自食惡果不足惜岭佳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望玫恳。 院中可真熱鬧京办,春花似錦不恭、人聲如沸财饥。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)缕探。三九已至,卻和暖如春鲸沮,著一層夾襖步出監(jiān)牢的瞬間讼溺,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人汪茧。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓弥虐,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子豺妓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容