聯合,列舉與typedef

2021-07-11 03:45:14 字數 2263 閱讀 9503

聯合,是乙個能在同一塊儲存空間儲存不同型別(不同時)資料的型別。因此為聯合的儲存空間為所有成員中佔據空間最大的。它允許建立乙個用於儲存乙個型別不定的值的變數。簡單點說,可以用該變數儲存char型別的,也可以用於儲存char*型別的,甚至是struct型別的。如:

union author ;

void test() ;

a.a = 12;//此時a所代表的儲存空間儲存的是int型別

printf("%d\n",a.a);//能正常輸出12

a.name = "name";//此時a所代表的儲存空間儲存的是字串

printf("%s--%d\n",a.name,a.a);//name可正常輸出,但a的值就不固定的

}

上述**中,首先在a所佔的記憶體塊中儲存int型12,然後儲存string型別的name,此時就無法使用原來儲存的值。

除上述外,聯合與結構體類似,除了使用的關鍵字不一樣:結構體使用struct,而聯合使用union。其餘的定義,宣告變數,初始化,成員賦值,指標,陣列都與結構體一樣。

與結構體類似,但使用enum關鍵字,用於宣告代表整數常量的符號。並且列舉是內部使用的。

列舉常量為int型別的,但可以將它們賦值給任意的整數型別,只要該型別能容納下列舉常量的值。

enum e;

void test()

上述**將int型別賦值給了unsigned char型別的變數,這是可行的,因為c可以容納下red的值(其值為0)。在預設情況下,列舉常量中的值被指定為整數值0,1,2等等。但可以為它們指定值。如果只針對乙個常量進行賦值,而沒有對後面的常量進行修改,那麼後面的常量會被賦予後續的值。如下:

enum e ;
上述**中,將red賦值成100,那麼green的值將會是101。

為乙個指定型別指定別名。它只能作用於型別,不能作用於數值;它的解釋由編譯器進行,而不是像#define一樣由預處理器處理。如:

typedef struct book book;

book b1;//使用別名book代表結構體book

在上述**中,typedef型別於#define。但兩者區別很大:它的作用域取決於typedef語句所在的位置。如果在函式內部,那它的作用域就是區域性的;在函式外部,則是全域性的。

1,typedef只能用於型別,而不能用於數值。即:typedef 100 i;是錯誤的。但#define可以#define i 100。

2,typedef是後面的表示前面,而#define是前面的代替後面。上面語句中,在實際執行時,會將所有的i全部換成100。

3,typedef由編譯器進行解釋,而#define由預處理器進行。

4,typedef定義後需要加分號,因為它是乙個完整的語句,而#define不用,因為它只是乙個簡單的代替。如下:

#define string char*

typedef char* string1;

void test()

上述兩種表示方法含義完全不同:char *n1,m1,表示n1是char*,而m1只是char型別;string1n2,m2卻表示n2與m2都是char*型別的。

因為string1代表著char*型別,宣告n2,m2時也是char*型別的。

在定義結構體變數時,需要寫struct+標識,可以使用typedef為該型別取一別名。有三種定義方式,如下:

typedef struct book book;

struct book;

typedef struct person person;

typedef struct city;

void test()

第一種,先定義結構體,然後使用typedef為該結構體取別名。

第二種,在定義結構體的同時使用typedef取別名。

第三中,在第二種的基礎上,可以省略結構體的標識,效果與第二種一樣。

1,typedef定義別名時,別名不一定在後面。如下:

typedef double (*p)(double,double);

double a(double a1,double a2)

void test()

typedef定義時,將別名p放在中間,p代表的型別是函式指標,該函式的返回值為double,引數為兩個double型別。

列舉與聯合

列舉 乙個被命名的整型常數的集合,關鍵字為 enum 列舉的定義與賦值 enum day 關鍵字加列舉名 注意 1.像這樣沒有進行初始化,則代表從第乙個成員起,依次賦值為0,1,2 但當其某個成員賦值 初始化 後,其後邊的成員按加1的規則確定其值。eg enum num 則a 0,b 0,c 1,d...

C語言 結構體 聯合體 列舉 typedef

2 聯合體 共用體 3.列舉型別 4 typedef define crt secure no warnings include include include include include struct 結構體名 struct student stu intmain0201 struct stu...

結構體列舉與聯合

基本介紹 struct是結構體的關鍵字,它將一些相關聯的資料打包成乙個整體,這些相關聯的資料可以是不同的型別。它們被稱為結構體的成員,結構體的成員可以是標量 陣列 指標 或者是其他結構體。結構的宣告 假設我們要建立學生檔案,要納入學生的姓名,年齡和性別三個內容。那麼我們可以通過建立乙個結構體來實現這...