枚举、typedef关键字

来源:互联网 发布:算法工程师做什么的 编辑:程序博客网 时间:2024/06/03 16:37

  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











0 0
原创粉丝点击