列舉 共用體 typedef與巨集定義

2021-09-30 20:18:35 字數 2773 閱讀 9768

c 語言列舉型別

實際問題中,有些變數的取值被限制在一定範圍內。例如,乙個星期內只有七天,一年

只有十二個月,乙個班每週有六門課程等。

c 語言提供了一種列舉(enum)型別,可以列出所有可能的取值。定義形式為:

enum 變數名;

這些值也稱為列舉元素。注意最後的分號;不能少。

例如,列出乙個星期有幾天:

enum week;
和結構體一樣,列舉變數可以先定義後說明,也可以在定義的同時說明,例如:

enum week a, b, c;
或者:

enum week a, b, c;
列舉值為常量,不是變數,不能賦值。列舉值預設從 0 開始,逐個加 1。也就是說,上

面的**定義了 7 個常量,分別為 sun、mon…sat,它們的值分別為 0、1…6。

【示例】列舉的使用。

#include int main() a, b, c;

a = sun;

b = mon;

c = tue;

printf("%d, %d, %d\n",a,b,c);

return 0;

}

執行結果:

0, 1, 2

因為列舉值是常量,不能賦值,所以下面的寫法是錯誤的:

sun = 5; mon = 2;

只能把列舉值賦予列舉變數,例如:

a = sun; b = sat;

同時,不建議把數值直接賦給列舉變數,例如:

a = 1; b = 6;

如果一定要使用數值,必須使用強制型別轉換:

a = (enum week)1; b = (enum week)6;

因為已經使用了 sun、mon…sat 幾個識別符號,所以不能再使用它們來定義變數等,

例如:

int sun = 3; char mon;

都是錯誤的。

c 語言共用體(共同體)

共用體(共同體)的定義和結構體類似,不過結構體的各個成員都會分配相應的記憶體空

間,而共用體的所有成員共享一段記憶體,它們的起始位址一樣,並且同一時刻只能使用其中

的乙個成員變數。

共用體定義的一般格式為:

union 共用體名;
共用體所占用的記憶體空間大小等於最長的成員所占用的位元組數。共用體使用了覆蓋技術,

幾個成員變數相互覆蓋,從而使幾個不同變數共占同一段記憶體。這也就意味著,同一時刻只

能存放乙個成員變數的值,只能有乙個成員存在,不可能像結構體一樣同時存放。如果對新

的成員變數賦值,就會把原來成員變數的值覆蓋掉。

共用體 data 中,成員 i 所占用的空間最大,為 4 個位元組,所以 data 型別的變數

(也就是 a、b、c)也占用 4 個位元組的記憶體。請看下面的例子:

#include uniona;

int main()

執行結果:

size of a: 4

a.i = 65

a.c = b

兩個不能:不能使用共用體變數,只能引用共用體變數中的成員。不能在定義共用體變 量時進行初始化。

c 語言型別定義符 typedef

c 語言不僅提供了豐富的資料型別,還允許使用者定義自己的資料型別。

定義資料型別使用 typedef 關鍵字,一般形式為:

typedef 原型別名 新型別名;

例如:

typedef int integer;

integer a, b;

a = 1;

b = 2;

integer a, b;等效於 int a, b;。

用 typedef 定義陣列、指標、結構體等型別會帶來很大的方便,不僅使程式書寫簡單

而且意義更加明確。例如:

typedef char name[20];
表示 name 是字元陣列型別,長度為 20。然後可用 name 說明變數,如:

name a1, a2, s1, s2;
完全等效於:

char a1[20], a2[20], s1[20], s2[20];
又如:

typedef struct stu stu;
定義 stu 表示 stu 的結構體型別,然後可用 stu 來說明結構體變數:

stu body1,body2;
兩點說明:

自定義資料型別必須以現有的資料型別為基礎,可以認為是現有型別的「別名」,並

沒有產生真正意義上的資料型別。為了「見名知意」,自定義資料型別一般大寫,盡量使用

含義明確的識別符號,例如:

typedef (int*) pint;

有時也可用巨集定義來代替 typedef 的功能,但是巨集定義是在預處理階段完成的,

而 typedef 是在編譯時完成的。

共用體,列舉體和typedef

共用體變數定義 union 共用體名 變數表列 特點 1.同乙個記憶體段可以用來存放幾種不同型別的成員 但在每一瞬間只能存放其中一種,而不是同時存放幾種。共用體變數中起作用的是最後一次存放的成員。共用體變數的位址和它各個成員的位址都是同一位址。2.不能對共用體變數名賦值,不能引用變數名來得到乙個值,...

結構體,共用體,列舉體,typedef

概念 結構體時一種構造資料型別 用途 把不同型別的資料組合成乙個整體 記憶體 各成員所佔記憶體空間的累加 一.結構體的宣告與定義變數的方法一共有三種 1.常規定義 struct aa 注意大括號後面有分號 變數定義 struct 機構體名 結構體變數名錶 如 struct aa aa,bb 前面的s...

結構體 共用體與列舉

part 1 一 結構體型別與程式設計應用 學生的記錄由學號和成績組成。n名學生的資料已在主函式中放入結構體陣列stu中。編寫函式 ndminlist,實現 把分數低的學生資料放在陣列t中,函式返回分數低的學生的人數。注意 分數低的學生可能不止乙個 include const int n 5 定義結...