摘要:如下面的結構體包含三個成員,分別是。聯(lián)合體是一種結構。其對其方式適合其中所有成員。
結構體(struct)是由一系列具有相同類型或不同類型的數(shù)據(jù)項構成的數(shù)據(jù)集合,這些數(shù)據(jù)項稱為結構體的成員。如下面的student結構體包含三個成員,分別是name、num、age。
枚舉(enum)是C語言的一種特殊類型。當我們在編程中遇到定義一些固定長度或范圍的數(shù)值時,可以考慮使用枚舉類型。使用枚舉可以讓我們的程序可讀性更強、看起來更加直觀。舉個例子,如果我們在編程中需要使用數(shù)字06分別表示星期日星期六,程序的可讀性就不高,我們需要翻手冊或者看程序注釋才能知道每個數(shù)字具體代表什么意思。如果我們使用枚舉呢,基本上不需要看注釋或手冊就可知曉其大意。
聯(lián)合體是一種結構。
它的所有成員相對于基地址的偏移量都是0。
此結構空間要大到足夠容納最寬的成員。
其對其方式適合其中所有成員。
// 創(chuàng)建結構體struct student{ char *name; // 學生名字 int num; // 學生學號 int age; // 學生年齡};
struct tag{ 成員變量...}variable;
通常,tag、結構體成員變量、variable這3個部分至少要出現(xiàn)2個
struct{ char name[100]; int age;}s1;//s1相當于對這個結構體聲明了一個變量,可以在程序中直接調(diào)用
s1相當于聲明的全局變量。
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; //需先對結構體B進行聲明,不然聲明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;//定義結構體指針 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};
注意:第一個枚舉成員的默認值為整型的 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("你喜歡的顏色是藍色"); break; default: printf("你沒有選擇你喜歡的顏色"); } return 0;}
通過前面的講解,我們知道結構體(Struct)是一種構造類型或復雜類型,它可以包含多個類型不同的成員。在C語言中,還有另外一種和結構體非常類似的語法,叫做共用體(Union),它的定義格式為:
union 共用體名{ 成員列表};
結構體和共用體的區(qū)別在于:結構體的各個成員會占用不同的內(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;}
運行結果:
4, 4
40, @, 40
39, 9, 39
2059, Y, 2059
3E25AD54, T, AD54
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/121417.html
摘要:結構體類型的特殊聲明在初階結構體中,我們已經(jīng)將了結構體類型是如何進行聲明的,那么在這里,我們將講一些特殊的結構體聲明不完全的聲明。所以我們應該這樣寫通過指針來找到下一個同類型結構體的寫法,我們就稱之為結構體的自引用。 ...
目錄 一、枚舉 (一)枚舉類型的定義 (二)使用枚舉的原因? (三)枚舉的優(yōu)點? (四)枚舉的大小 (五)枚舉的使用 二、聯(lián)合(共用體) (一)聯(lián)合類型的定義 (二)聯(lián)合的特點 (三)面試題 (四)聯(lián)合大小的計算 一、枚舉 枚舉顧名思義就是:列舉?。? ?即把可能的取值一一列舉出來。 比如我們現(xiàn)實生活中: 一周當中從周一至周日的7天,可以一一列舉;性別有:男、女、保密,可以一一列舉;月份有...
摘要:如果嵌套了結構體的情況,嵌套的結構體對齊到自己的最大對齊數(shù)的整數(shù)倍處,結構體的整體大小就是所有最大對齊數(shù)含嵌套結構體的對齊數(shù)的整數(shù)倍。 user_defined_d...
閱讀 2896·2021-11-11 16:55
閱讀 944·2021-09-28 09:36
閱讀 3792·2021-09-22 15:22
閱讀 2222·2021-09-06 15:12
閱讀 1754·2021-08-19 10:55
閱讀 2887·2019-08-30 12:52
閱讀 494·2019-08-29 14:03
閱讀 1203·2019-08-29 12:27