- 枚举
枚举是一种用户定义的数据类型,它用关键字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 %,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 ",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