常量符号化:
- 用符号而不是具体的数字来表示程序中的数字
- const int a=12; const使a固定为12的值
枚举:
- 枚举是一种用户定义的数据类型,它用关键字enum以如下语法来声明:
- enum 枚举类型名字{名字0,.....,名字n};
- 枚举类型名字通常并不真的使用,要用的是在大括号里的名字,因为它们就是常量符号,它们的类型固定为int,值依次从0到n,如名字0的值即为0,名字1的值即为1,名字n的值即为n。
- 当需要一些可以排列起来的常量值时,定义枚举的意义就是给了这些常量值名字。
- 枚举量可以作为值
- 枚举类型可以跟上enum作为类型
- 实际上等于int类型,做整数运算以及输入输出
-
#include<stdio.h> enum color{red,yellow,green}; //定义新的数据类型 叫做color,可当作类似int的数据类型来用 void f(enum color c); int main(void) { enum color t=red; //enum clor为定义数据类型,当作int使用 scanf("%d",&t); f(t); return 0; } void f(enum color c) { printf("%d\n",c); }
- NumCOLORS作为自动计数
-
#include<stdio.h> enum COLOR {RED,YELLOW,GREEN,NumCOLORS }; //NumCOLORS作为计数前面的颜色总数 int main(int argc,char const *argv[]) { int color=-1; char *ColorNames[NumCOLORS]={ "red","yellow","green",}; char *colorName=NULL; //定义指针 printf("输入你喜欢的颜色的代码:"); scanf("%d",&color); if(color>=0&&color<NumCOLORS){ colorName=ColorNames[color]; }else{ colorName="unknown"; } printf("你喜欢的颜色是%s\n",colorName); }
枚举量:
- 声明枚举量的时候可以指定值
- enum COLOR[RED=1,YELLOW,GREEN=5};
- 那么YELLOW便是RED+1=2,而YELLOW和GREEN之间的3和4便被舍弃
- 虽然枚举类型可以当作类型使用,但是实际上不好用
- 如果有意义上排比的名字,用枚举比const int方便
- 枚举比宏(macro)好,因为枚举有int类型
结构类型:
- 结构体:struct 名称 {int 成员名字,int 成员名字};
- stuct 名称 变量; 即为该变量里有成员的数据
- 输出用%i
-
struct date{ int month; int day; int year; }; //每一个struct date定义的变量里都有month,day,year struct date today; today.month=07; today.day=31; today.year=2014;
声明结构的形式:
- p1何p2都是point,里面都有x和y的值
struct point{ int x; int y; }; struct point p1,p2;
-
p1和p2都是一种无名结构,里面有x和y,通常用在临时使用结构
struct{ int x; int y; }p1,p2;
-
p1和p2都是point,里面有x和y的值
struct point{ int x; int y; }p1,p2;
结构初始化的方式:
struct date today;
today.month=07;
today.day=31;
today.year=2014;
struct date today={07,31,2014};
struct date today={.month=7,.year=2014};
//因为day没有初始化,所以自动初始化为0
struct date today;
today=(struct date){07,31,2014};
结构成员:
- 结构和数组有点像
- 数组用[ ]运算符和下标访问其成员
- a[10]=10;
- 结构用 . 运算符和名字访问其成员
- today.day student.firstName p1.x p1.y
结构运算:
- 要访问整个结构,直接用结构变量的名字
- 对于整个结构 ,可以做赋值、取地址,也可以传递给函数参数
- p1=(struct point){5,10}; 相当于p1.x=5;p1.y=10;
- p1=p2; 相当于p1.x=p2.x; p1.y=p2.y
结构指针:
- 和数组不同,结构变量的名字并不是结构变量的地址,必须使用&运算符
- struct date *pDate=&today;
结构体数组:
结构体中也有数组,称为结构体数组。它与前面讲的数值型数组几乎是一模一样的,只不过需要注意的是,结构体数组的每一个元素都是一个结构体类型的变量,都包含结构体中所有的成员项。
定义结构体数组的方法很简单,同定义结构体变量是一样的,只不过将变量改成数组。或者说同前面介绍的普通数组的定义是一模一样的,如:
- struct STUDENT stu[10];
这就定义了一个结构体数组,共有 10 个元素,每个元素都是一个结构体变量,都包含所有的结构体成员。
结构体数组的引用与引用一个结构体变量在原理上是一样的。只不过结构体数组中有多个结构体变量,我们只需利用 for 循 环一个一个地使用结构体数组中的元素。
结构输入变量的函数: