枚舉是一種用戶定義的數據類型,它用關鍵字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