1、enum
enum关键字用来定义一种自定义类型,称之为枚举类型,它的值会在定义时一一列举出来,用它定义的变量只限于列举出来的值的范围内;
例如:
enum Color
{
red,yellow,blue,white,black
};
花括号中的值成为枚举元素或枚举常量,枚举类型的枚举元素在C中被当作常量处理,不能对其赋值,每一个枚举元素都代表一个整数,不能为浮点数等等,默认依次为0,1,2,3.....
这个数值只能在定义时显式的指定,以后不能更改,被指定的枚举元素的后面的元素的值依次等于前一个元素的值加1;
枚举元素是真正意义上的常量,我们是不能够通过取地址符拿到它的地址;
一个枚举类型的枚举元素可以直接使用,也可以定义枚举变量赋值后再使用;
例如:
#include
enum Color
{
red,yellow,blue=7,white,black
};
int main()
{
enum Color cc;
cc=blue;
printf("直接使用枚举元素:%d\n",white);
printf("定义枚举变量赋值后使用:%d\n",cc);
return 0;
}
枚举类型和#define的区别
#define通常用来定义宏常量,也称为宏定义,它只是简单的进行值替换,枚举常量才是真正意义上的常量;
#define宏常量无法被调试,枚举常量可以;
#define宏常量无类型信息,枚举常量是一种特定类型的常量;
2、typedef
typedef 具体的意义是什么??
它用于给一个已存在的类型定义别名,也可说重命名;这一过程并没有产生新的类型,它重定义的类型不能进行unsigned和signed扩展;
typedef 和 #define 的区别:
typedef 是给已有类型取别名;
#define 是简单的字符串替换,没有别名的概念;
具体看如下代码:
typedef char* PCHAR;
PCHAR p1,p2;
#define PCHAR char*;
PCHAR p3,p4;
以上的p1,p2,p3,p4有不同么?
实际上是有不同的,第一个实际上等价于
char* p1,char* p2;
而第二个实际上等价于:
char* p3,p4;
这时候,p3属于char*型变量,而p4是char型变量!