成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

詳解C語(yǔ)言結(jié)構(gòu)體、枚舉、聯(lián)合體

fou7 / 958人閱讀

摘要:如下面的結(jié)構(gòu)體包含三個(gè)成員,分別是。聯(lián)合體是一種結(jié)構(gòu)。其對(duì)其方式適合其中所有成員。

1.什么是結(jié)構(gòu)體、枚舉、聯(lián)合體

結(jié)構(gòu)體(struct)是由一系列具有相同類型或不同類型的數(shù)據(jù)項(xiàng)構(gòu)成的數(shù)據(jù)集合,這些數(shù)據(jù)項(xiàng)稱為結(jié)構(gòu)體的成員。如下面的student結(jié)構(gòu)體包含三個(gè)成員,分別是name、num、age。

枚舉(enum)是C語(yǔ)言的一種特殊類型。當(dāng)我們?cè)诰幊讨杏龅蕉x一些固定長(zhǎng)度或范圍的數(shù)值時(shí),可以考慮使用枚舉類型。使用枚舉可以讓我們的程序可讀性更強(qiáng)、看起來(lái)更加直觀。舉個(gè)例子,如果我們?cè)诰幊讨行枰褂脭?shù)字06分別表示星期日星期六,程序的可讀性就不高,我們需要翻手冊(cè)或者看程序注釋才能知道每個(gè)數(shù)字具體代表什么意思。如果我們使用枚舉呢,基本上不需要看注釋或手冊(cè)就可知曉其大意。

聯(lián)合體是一種結(jié)構(gòu)。
它的所有成員相對(duì)于基地址的偏移量都是0。
此結(jié)構(gòu)空間要大到足夠容納最寬的成員。
其對(duì)其方式適合其中所有成員。

// 創(chuàng)建結(jié)構(gòu)體struct student{  char *name;  // 學(xué)生名字  int num;     // 學(xué)生學(xué)號(hào)  int age;     // 學(xué)生年齡};

2.定義結(jié)構(gòu)體

struct tag{	成員變量...}variable;

通常,tag、結(jié)構(gòu)體成員變量、variable這3個(gè)部分至少要出現(xiàn)2個(gè)

2.1 包含結(jié)構(gòu)體成員變量、variable

struct{	char name[100];	int age;}s1;//s1相當(dāng)于對(duì)這個(gè)結(jié)構(gòu)體聲明了一個(gè)變量,可以在程序中直接調(diào)用

s1相當(dāng)于聲明的全局變量。

2.2 tag、結(jié)構(gòu)體成員變量

struct person{	char name[100];	int age;};

2.3 用結(jié)構(gòu)體聲名變量

struct person p1,p2[5],*p3

2.4 用typedef 創(chuàng)建新類型

typedef struct {	char name[100];	int age;} person;
//用新定義的person類型定義變量person p1,p2[5],*p3

2.5 兩個(gè)結(jié)構(gòu)體相互包含

struct B;				//需先對(duì)結(jié)構(gòu)體B進(jìn)行聲明,不然聲明A時(shí)編譯無(wú)法通過struct A{	struct B *partner;	//other members;};struct B{	struct A *partner;	//other members;};

2.6 結(jié)構(gòu)體變量初始化

#include  struct persons {    char name[100];    int age;}person = {"chuhe",18};int main(){    printf("%s,%d", person.name, person.age);    return 0;}

2.7 結(jié)構(gòu)體指針

#include  typedef struct persons {    char name[100];        int age;}persons;int main(){    struct persons p = { "chuhe",18 };    printf("%s,%d/n", p.name, p.age);    persons* p1 = &p;//定義結(jié)構(gòu)體指針    printf("%s,%d/n", p1->name, p1->age);    return 0;}

3.枚舉

3.1 定義方式

enum 枚舉名{元素1,元素2};

3.2 為什么用枚舉

#define MON  1#define TUE  2#define WED  3#define THU  4#define FRI  5#define SAT  6#define SUN  7

例如上式,定義非常麻煩,此時(shí)便可以用枚舉

enum DAY{MON=1,TUE,WED, THU, FRI, SAT, SUN};

注意:第一個(gè)枚舉成員的默認(rèn)值為整型的 0,后續(xù)枚舉成員的值在前一個(gè)成員上加 1。我們?cè)谶@個(gè)實(shí)例中把第一個(gè)枚舉成員的值定義為 1,第二個(gè)就為 2,以此類推

3.3 枚舉變量的定義

enum DAY{MON=1,TUE,WED,THU,FRI};enum DAY day;enum DAY{MON=1,TUE,WED,THU,FRI}day;//也可以在定義枚舉類型時(shí)一起定義enum{MON=1, TUE, WED, THU, FRI, SAT, SUN}day;//可以省略枚舉名稱

3.4 實(shí)例

#include enum DAY{      MON=1, TUE, WED, THU, FRI, SAT, SUN};int main(){    enum DAY day;    day = WED;    printf("%d",day);    return 0;}

3.5 枚舉實(shí)際用途

#include #include int main(){    enum color { red=1, green, blue };    enum  color favorite_color;    printf("請(qǐng)輸入你喜歡的顏色: (1. red, 2. green, 3. blue): ");    scanf("%u", &favorite_color);    switch (favorite_color){    case red:        printf("你喜歡的顏色是紅色");        break;    case green:        printf("你喜歡的顏色是綠色");        break;    case blue:        printf("你喜歡的顏色是藍(lán)色");        break;    default:        printf("你沒有選擇你喜歡的顏色");    }    return 0;}

4.聯(lián)合體

通過前面的講解,我們知道結(jié)構(gòu)體(Struct)是一種構(gòu)造類型或復(fù)雜類型,它可以包含多個(gè)類型不同的成員。在C語(yǔ)言中,還有另外一種和結(jié)構(gòu)體非常類似的語(yǔ)法,叫做共用體(Union),它的定義格式為:

union 共用體名{    成員列表};

4.1 與結(jié)構(gòu)體區(qū)別

結(jié)構(gòu)體和共用體的區(qū)別在于:結(jié)構(gòu)體的各個(gè)成員會(huì)占用不同的內(nèi)存,互相之間沒有影響;而共用體的所有成員占用同一段內(nèi)存,修改一個(gè)成員會(huì)影響其余所有成員。

4.2 定義

union data{    int n;    char ch;    double f;};union data a, b, c;

共用體 data 中,成員 f 占用的內(nèi)存最多,為 8 個(gè)字節(jié),所以 data 類型的變量(也就是 a、b、c)也占用 8 個(gè)字節(jié)的內(nèi)存,請(qǐng)看下面的演示:

#include union data{    int n;    char ch;    short m;};int main(){    union data a;    printf("%d, %d/n", sizeof(a), sizeof(union data) );    a.n = 0x40;    printf("%X, %c, %hX/n", a.n, a.ch, a.m);    a.ch = "9";    printf("%X, %c, %hX/n", a.n, a.ch, a.m);    a.m = 0x2059;    printf("%X, %c, %hX/n", a.n, a.ch, a.m);    a.n = 0x3E25AD54;    printf("%X, %c, %hX/n", a.n, a.ch, a.m);       return 0;}

運(yùn)行結(jié)果:
4, 4
40, @, 40
39, 9, 39
2059, Y, 2059
3E25AD54, T, AD54

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/121417.html

相關(guān)文章

  • C語(yǔ)言中還有這些類型,別再說(shuō)你不知道了!手把手帶你解鎖C語(yǔ)言中的自定義類型,讓你寫你所想。

    摘要:結(jié)構(gòu)體類型的特殊聲明在初階結(jié)構(gòu)體中,我們已經(jīng)將了結(jié)構(gòu)體類型是如何進(jìn)行聲明的,那么在這里,我們將講一些特殊的結(jié)構(gòu)體聲明不完全的聲明。所以我們應(yīng)該這樣寫通過指針來(lái)找到下一個(gè)同類型結(jié)構(gòu)體的寫法,我們就稱之為結(jié)構(gòu)體的自引用。 ...

    hizengzeng 評(píng)論0 收藏0
  • C語(yǔ)言進(jìn)階】自定義類型(2)枚舉&聯(lián)合

    目錄 一、枚舉 (一)枚舉類型的定義 (二)使用枚舉的原因? (三)枚舉的優(yōu)點(diǎn)? (四)枚舉的大小 (五)枚舉的使用 二、聯(lián)合(共用體) (一)聯(lián)合類型的定義 (二)聯(lián)合的特點(diǎn) (三)面試題 (四)聯(lián)合大小的計(jì)算 一、枚舉 枚舉顧名思義就是:列舉?。? ?即把可能的取值一一列舉出來(lái)。 比如我們現(xiàn)實(shí)生活中: 一周當(dāng)中從周一至周日的7天,可以一一列舉;性別有:男、女、保密,可以一一列舉;月份有...

    leiyi 評(píng)論0 收藏0
  • PHP_底層分析

    摘要:將會(huì)產(chǎn)生強(qiáng)制分裂結(jié)構(gòu)體結(jié)構(gòu)體引用數(shù)組時(shí)的一些奇怪現(xiàn)象引用數(shù)組時(shí)的怪現(xiàn)象數(shù)組不會(huì)比較細(xì)致的檢查,多維數(shù)組存在。因此,判斷的時(shí)候,只會(huì)判斷外面一層的結(jié)構(gòu)體。中底層都離不開表。底層所有的變量都是放在中。 PHP編譯特點(diǎn) 編譯型語(yǔ)言 對(duì)于C語(yǔ)言,C++,編譯成機(jī)器碼(二進(jìn)制)來(lái)運(yùn)行。Java語(yǔ)言,把.java 編譯成.class, 稱為bytecode(字節(jié)碼),由jvm來(lái)運(yùn)行 解釋型語(yǔ)言 解...

    tomlingtm 評(píng)論0 收藏0
  • 2021-09-05_user_defined_data_types(自定義數(shù)據(jù)類型)

    摘要:如果嵌套了結(jié)構(gòu)體的情況,嵌套的結(jié)構(gòu)體對(duì)齊到自己的最大對(duì)齊數(shù)的整數(shù)倍處,結(jié)構(gòu)體的整體大小就是所有最大對(duì)齊數(shù)含嵌套結(jié)構(gòu)體的對(duì)齊數(shù)的整數(shù)倍。 user_defined_d...

    liaosilzu2007 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<