文章目录
- 前言
- 一、enum(枚举)
- 二、typedef
- 总结
前言
主要记录学习编程的经验和个人知识点总结,仅供学习用途。
提示:以下是本篇文章正文内容,主要讲 enum(枚举)和 typedef。
一、enum(枚举)
枚举是C语言中的一种基本数据类型,它可以让数据更简洁,更易读。
枚举语法定义格式为:
enum 枚举名
{
枚举元素1,
枚举元素2,
...
}枚举变量;
枚举名是自定义的一种数据数据类型名,而枚举变量为枚举名类型的一个变量,叫做枚举变量。
枚举变量是对一个变量取值范围的限定,而花括号内是它的取值范围,枚举名类型的变量也就是枚举变量,它智能取值为花括号内的任何一个值,如果赋给枚举变量的值不在上述{ }列表内,则会报错或者警告。枚举元素也是枚举常量,常量一般为大写。
比如一周有7天,如果不用枚举,采用#define为整数定义如下:
#define MON 1
#define YUE 2
#define WED 3
#define THU 4
#define FRI 5
#define SAT 6
#define SUN 7
采用枚举的方式实现同样的功能:
enum DAY
{
MON=1,TUE,WED,THU,FRI,SAT,SUN
};
enum DAY yesterday;
enum DAY today;
enum DAY tomorrow;//变量tomorrow的类型为枚举型enum DAY
注意:第一个枚举成员默认值为整型的0,后续枚举成员的值在前一个成员基础上加1,如果第一个枚举成员值定义为1,第二个就为2,以此类推。
二、typedef
typedef是C语言提供的关键字,可以使用它来为类型取一个新的名字。
例如:
typedef unsigned char BYTE;
在这个类型定义之后,标识符BYTE可以作为类型unsigned char的缩写,比如:
BYTE b1,b2;
按照惯例,定义时采用大写字母,提醒用户类型名称是一个象征性的缩写。
用途一:
定义一个类型的别名,而不是简单的宏替换。可以用作同时声明指针型的多个对象。
比如:
char * pa,pb; //只声明了一个指向字符变量的指针和一个字符变量
//以下可行
typedef char *PCHAR; //一般为大写
PCHAR pa,pb; //可行,同时声明了两个只想字符变量的指针。
//虽然
char *pa,*pb;
//也可行,但是相对来说没有用typedef的形式直观,尤其在需要大量指针的地方,typedef的方式更省事。
用途2
用typedef关键字把枚举或者结构体定义成别名,并利用该别名进行变量声明:
typedef enum Workday1
{
saturday,
sunday,
monday,
tuesday,
wednesday,
thursday,
friday
}workday; //此处的workday为枚举型 enum Workday1的别名
workday today,tomorrow;//变量today和tomorrow的类型为枚举类型workday,也就是enum Workday1
typedef struct tagPOINT
{
int x;
int y;
}POINT;
POINT p1;
//没有typedef的话,只能使用如下定义
struct tagPOINT1 p1;
用途3
用 typedef 定义与平台无关的类型。
比如定义一个叫REAL的浮点类型,在目标平台上,让它表示最高精度的类型:
typedef long double REAL;
在不支持long double的平台2上,改为:
typedef double REAL;
在不支持double的平台3上,改为:
typedef float REAL;
当程序跨平台时,只要改typedef本身就好了,不需要对别的源码做修改,可以在写代码时减少不必要的修改工作。
用途4
为复杂的声明定义一个新的简单别名。
总结
总结:#define是C指令,用于为各种数据类型定义别名,与typedef类似,但是有以下不同:
- typedef仅限于为类型定义符号名称,#define不仅可以为类型定义别名,也能为数值定义别名。
- typedef是由编译器执行解释的,#define是由预编译器进行处理的。
- typedef一般情况下比**#define**要好,特别是在有指针的场合下,例如:
typedef char * pStr1;
#define pStr2 char *;
pStr1 s1,s2;
pStr2 s3,s4;
上述变量中,s1,s2,s3会被定义为char *,而s4则定义成了char,不是预期的指针变量,原因在于#define只是简单的字符串替换,而typedef是为一个类型起新名字。
参考资料:
- RUNOOB enum
- RUNOOB typedef
- BigCoder typedef
- liitdar typedef
- 哈哈呵h
- 目盼兮
- 一句话帮你理解typedef的用法
- C typedef 4种用法小结