1)枚举类型介绍及定义


目前为止接触到的数据类型:


基本数据类型


指针类型


空类型 void


构造类型


数组、结构体


枚举类型


a、枚举类型


①枚举类型定义的一般形式:


enum 枚举类型名{


值1,


值2,


...


值n


};


在枚举值中应罗列出所有可用值。这些值也称为枚举单元。


枚举类型是一种基本类型,而不是一种构造类型,因为它不能再分解任何基本类型。。


②例如:定义一个枚举变量,保存一周天数

enum weekDay{ 

Sunday, 

Monday, 

Tuesday, 

Wednesday, 

Thursday, 

Friday, 

Saturday 

};



关于枚举类型元素的命名习惯:


如下:k+枚举名+枚举值名

enum iColor{ 

kIcolorWhite, 

kIcolorYello, 

kIcolorBlack 

};

  2)枚举变量的定义和使用


a、枚举类型的变量的定义


定义:


①先定义枚举类型,在定义枚举类型的变量


enum 枚举类型名 枚举变量名列表;


②定义枚举类型的同时,定义变量


enum Sex{kSexMan,kSexWomen,kSexYao} iSex;


b、枚举类型的初始化


①赋值:


enum Sex iSex;//定义枚举变量


iSex=kSexMan;//给枚举变量赋值


c、枚举变量的使用


printf("%d\n",iSex);


d、枚举变量的值


枚举的元素的值:第一个元素的值默认为0,一次递增+1;


如:


kSexMan=1,kSexWomen=2,kSexYao=3


enum Sex{kSexMan  ,kSexWomen  ,kSexYao};


注意:枚举类型定义以后,系统会自动给枚举的每个元素都会赋值一个整形的初值。


默认初值:从第一个元素开始值为0,以后每个元素的值,都是上一个元素的值+1




  3)typedef关键字介绍

回顾:之前学习的类型: 

基本数据类型、空类型、构造类型、指针类型、定义类型 

a、typedef关键字的概念及语法格式 

①概念和语法 

C语言不仅提供了丰富的数据类型,而且还允许有用户自己定义类型说明符,也就是说允许由用户为数据类型取“别名”。 

一般形式: 

typedef 原类型名 新类型名 

其中原类型名种含有定义部分,新类型名一般用大写表示,以便区别。 

有时也可用宏定义来代替typedef的功能,但是宏定义是由预处理来完成的,而typedef则是在编译时完成的,后者会更加灵活。 

代码: 

typedef int MALATANG; 

MALATANG qiezi=3; 

MALATANG *p=&qiezi; 

printf("%d\n",qiezi);//输出3 

printf("%p\n",*p);   //输出3 

 

b、typedef的使用方法 

①基本数据类型 

代码: 

typedef int MALATANG; 

MALATANG qiezi=3; 

MALATANG *p=&qiezi; 

printf("%d\n",qiezi);//输出3 

printf("%p\n",*p);   //输出3 

②用在数组,给数组起别名 

代码: 

typedef int ARRAY[5]; 

ARRAY a1={1,2,3,4,5},b1={6,7,8,9,0}; 
-->//等价于int a1[5],b1[5]; 

for(int i=0;i<5;i++){ 

printf("%d\t",a1[i]); 

} 

③用在结构体、给结构体起别名 

不起别名的用法: 

struct Person { 

char *name; 

int age; 

}; 

struct Person p1={"zhangsna",16}; 

a)给结构体起个别名法一 

//给struct Person 起个别名 P 

typedef struct Person P; 

p p2={"lisi",18}; 

b)给结构体起个别名法二. 

typedef struct Car{ 

int lun; 

int speed; 

}MYCAR;//表示把结构体起个别名 MYCAR 

MYCAR car1={2,200}; 

c)给匿名的结构体起个别名 

typedef struct{ 

int screenSize; 

int ram; 

}IPHONE; 

//用新类型定义结构体变量 

IPHONE iphone7={10,8}; 

④用在枚举类型上,给枚举类型起别名 

a)typedef enum Sex{kSexMan,kSexWomen,kSexYao} ISEX;//ISEX是别名 

b)typedef enum { 

Sunday, 

Monday, 

Tuesday, 

Wednesday, 

Thursday, 

Friday, 

Saturday 

}WEEKDAY;   //WEEKDAY是别名 

c)typedef enum Sex S;//给枚举类型起个别名S 

S s1,s2; 

s1=kSexYao; 

⑤给函数指针起别名 

int sum(int a,int b){ 

return a+b; 

} 

int div(int a,int b){ 

return a-b; 

} 

//函数指针:指向函数的指针 

int (*p)(int,int);//函数指针 

typedef int (*FUN)(int,int);//FUN是一个别名 

FUN f1,f2; 

f1=sum; 

printf("%d\n",f1(1,5));//输出结果为6