枚舉是一種用戶定義的數據類型,它用關鍵字enum以如下語法格式來聲明:
enum 枚舉類型名字 {名字0,名字1,。。。,名字n};
枚舉類型名字通常並不真的使用,要用的是大括號裡面的名字,因為它們就是常量符號,它們的類型是int,值則依次從0到n。
如:enum color{red,yellow,green};
就創建了3個常量,red的值是0,yellow的值是1,green的值是2。
當需要一些可以排列起來的常量值時,定義枚舉的意思就是給這些常量值名稱。
枚舉量可以作為值;
枚舉類型可以加上enum作為類型;但實際是以整數來計算和輸入輸出的。
#include<stdio.h> enum color{ red, yellow, green,Numcolors};//此處Numcolors為小套路,數值剛好等於定義的枚舉量,可以定義數組,遍歷數組等使用。 void f(enum color c);//此處enum必須帶上 int main(void) { enum color t = red;//枚舉類型可以加上enum作為類型 scanf("%d",&t); f(t); return 0; } void f(enum color c) { printf("%d\n%,c); }
枚舉量
聲明枚舉量的時候可以指定值,如
enum COLOR {RED = 1, YELLOW,GREEN = 5};//RED = 1是從1開始的,不是從0 //YELLOW =2 //GREEN = 5
枚舉只是int,即使給枚舉類型的變量賦不存在的值,也沒有任何warning和error。
雖然枚舉類型可以當做類型用,但是很少用。
如果有意義上排比的名字,用枚舉比用const int方便。
枚舉比宏好,因為枚舉有int類型。
#include<stdio.h> int main(int grc,char *grv[]) { struct date { int month; int day; int year; }; struct date today; today.month = 07; today.day = 31; today.year = 2014; printf("Today's date is %i-%i-%i\n",today.month,today.day,today.year); return 0; }
和本地變量一樣:在函數內部聲明的結構變量只能在函數內部使用;在函數外聲明的結構變量可以在所有函數使用。
所以通常在函數外部聲明結構變量,這樣可以在多個函數使用。
結構變量的初始化
struct date day = {07,31,2014};//第一種初始化方法 struct Thismonth = {.month = 07,.year = 2014};//第二種初始化方法。未指定為0
結構變量的成員
結構和數組有點像
數組用【】運算符和下標訪問其成員
結構用 .運算符和名字訪問其成員
today.day
要訪問整個結構,直接用結構變量的名字
對於整個結構,可以賦值,取地址,也可以傳遞給函數參數
p1 = (struct point){5,10}; ----> p1.x = 5; p2.y = 10;
p1 = p2; ---->相當於p1.x = p2.x; p1.y = p2.y