摘要:如下面的結(jié)構(gòu)體包含三個成員,分別是。聯(lián)合體是一種結(jié)構(gòu)。其對其方式適合其中所有成員。
結(jié)構(gòu)體(struct)是由一系列具有相同類型或不同類型的數(shù)據(jù)項構(gòu)成的數(shù)據(jù)集合,這些數(shù)據(jù)項稱為結(jié)構(gòu)體的成員。如下面的student結(jié)構(gòu)體包含三個成員,分別是name、num、age。
枚舉(enum)是C語言的一種特殊類型。當(dāng)我們在編程中遇到定義一些固定長度或范圍的數(shù)值時,可以考慮使用枚舉類型。使用枚舉可以讓我們的程序可讀性更強、看起來更加直觀。舉個例子,如果我們在編程中需要使用數(shù)字06分別表示星期日星期六,程序的可讀性就不高,我們需要翻手冊或者看程序注釋才能知道每個數(shù)字具體代表什么意思。如果我們使用枚舉呢,基本上不需要看注釋或手冊就可知曉其大意。
聯(lián)合體是一種結(jié)構(gòu)。
它的所有成員相對于基地址的偏移量都是0。
此結(jié)構(gòu)空間要大到足夠容納最寬的成員。
其對其方式適合其中所有成員。
// 創(chuàng)建結(jié)構(gòu)體struct student{ char *name; // 學(xué)生名字 int num; // 學(xué)生學(xué)號 int age; // 學(xué)生年齡};
struct tag{ 成員變量...}variable;
通常,tag、結(jié)構(gòu)體成員變量、variable這3個部分至少要出現(xiàn)2個
struct{ char name[100]; int age;}s1;//s1相當(dāng)于對這個結(jié)構(gòu)體聲明了一個變量,可以在程序中直接調(diào)用
s1相當(dāng)于聲明的全局變量。
struct person{ char name[100]; int age;};
struct person p1,p2[5],*p3
typedef struct { char name[100]; int age;} person;
//用新定義的person類型定義變量person p1,p2[5],*p3
struct B; //需先對結(jié)構(gòu)體B進(jìn)行聲明,不然聲明A時編譯無法通過struct A{ struct B *partner; //other members;};struct B{ struct A *partner; //other members;};
#include struct persons { char name[100]; int age;}person = {"chuhe",18};int main(){ printf("%s,%d", person.name, person.age); return 0;}
#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;}
enum 枚舉名{元素1,元素2};
#define MON 1#define TUE 2#define WED 3#define THU 4#define FRI 5#define SAT 6#define SUN 7
例如上式,定義非常麻煩,此時便可以用枚舉
enum DAY{MON=1,TUE,WED, THU, FRI, SAT, SUN};
注意:第一個枚舉成員的默認(rèn)值為整型的 0,后續(xù)枚舉成員的值在前一個成員上加 1。我們在這個實例中把第一個枚舉成員的值定義為 1,第二個就為 2,以此類推
enum DAY{MON=1,TUE,WED,THU,FRI};enum DAY day;enum DAY{MON=1,TUE,WED,THU,FRI}day;//也可以在定義枚舉類型時一起定義enum{MON=1, TUE, WED, THU, FRI, SAT, SUN}day;//可以省略枚舉名稱
#include enum DAY{ MON=1, TUE, WED, THU, FRI, SAT, SUN};int main(){ enum DAY day; day = WED; printf("%d",day); return 0;}
#include #include int main(){ enum color { red=1, green, blue }; enum color favorite_color; printf("請輸入你喜歡的顏色: (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;}
通過前面的講解,我們知道結(jié)構(gòu)體(Struct)是一種構(gòu)造類型或復(fù)雜類型,它可以包含多個類型不同的成員。在C語言中,還有另外一種和結(jié)構(gòu)體非常類似的語法,叫做共用體(Union),它的定義格式為:
union 共用體名{ 成員列表};
結(jié)構(gòu)體和共用體的區(qū)別在于:結(jié)構(gòu)體的各個成員會占用不同的內(nèi)存,互相之間沒有影響;而共用體的所有成員占用同一段內(nèi)存,修改一個成員會影響其余所有成員。
union data{ int n; char ch; double f;};union data a, b, c;
共用體 data 中,成員 f 占用的內(nèi)存最多,為 8 個字節(jié),所以 data 類型的變量(也就是 a、b、c)也占用 8 個字節(jié)的內(nèi)存,請看下面的演示:
#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;}
運行結(jié)果:
4, 4
40, @, 40
39, 9, 39
2059, Y, 2059
3E25AD54, T, AD54
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/121417.html
摘要:結(jié)構(gòu)體類型的特殊聲明在初階結(jié)構(gòu)體中,我們已經(jīng)將了結(jié)構(gòu)體類型是如何進(jìn)行聲明的,那么在這里,我們將講一些特殊的結(jié)構(gòu)體聲明不完全的聲明。所以我們應(yīng)該這樣寫通過指針來找到下一個同類型結(jié)構(gòu)體的寫法,我們就稱之為結(jié)構(gòu)體的自引用。 ...
目錄 一、枚舉 (一)枚舉類型的定義 (二)使用枚舉的原因? (三)枚舉的優(yōu)點? (四)枚舉的大小 (五)枚舉的使用 二、聯(lián)合(共用體) (一)聯(lián)合類型的定義 (二)聯(lián)合的特點 (三)面試題 (四)聯(lián)合大小的計算 一、枚舉 枚舉顧名思義就是:列舉?。? ?即把可能的取值一一列舉出來。 比如我們現(xiàn)實生活中: 一周當(dāng)中從周一至周日的7天,可以一一列舉;性別有:男、女、保密,可以一一列舉;月份有...
摘要:將會產(chǎn)生強制分裂結(jié)構(gòu)體結(jié)構(gòu)體引用數(shù)組時的一些奇怪現(xiàn)象引用數(shù)組時的怪現(xiàn)象數(shù)組不會比較細(xì)致的檢查,多維數(shù)組存在。因此,判斷的時候,只會判斷外面一層的結(jié)構(gòu)體。中底層都離不開表。底層所有的變量都是放在中。 PHP編譯特點 編譯型語言 對于C語言,C++,編譯成機器碼(二進(jìn)制)來運行。Java語言,把.java 編譯成.class, 稱為bytecode(字節(jié)碼),由jvm來運行 解釋型語言 解...
摘要:如果嵌套了結(jié)構(gòu)體的情況,嵌套的結(jié)構(gòu)體對齊到自己的最大對齊數(shù)的整數(shù)倍處,結(jié)構(gòu)體的整體大小就是所有最大對齊數(shù)含嵌套結(jié)構(gòu)體的對齊數(shù)的整數(shù)倍。 user_defined_d...
閱讀 2910·2021-11-11 16:55
閱讀 958·2021-09-28 09:36
閱讀 3807·2021-09-22 15:22
閱讀 2240·2021-09-06 15:12
閱讀 1772·2021-08-19 10:55
閱讀 2896·2019-08-30 12:52
閱讀 504·2019-08-29 14:03
閱讀 1212·2019-08-29 12:27