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 定義結...