您的位置:首页 > 编程语言 > C语言/C++

【C语言复习(三)】enum、typedef 和#define的分析与区别

2014-06-12 16:09 302 查看

1、enum

enum关键字用来定义一种自定义类型,称之为枚举类型,它的值会在定义时一一列举出来,用它定义的变量只限于列举出来的值的范围内;

例如:

enum Color
{
red,yellow,blue,white,black
};


花括号中的值成为枚举元素或枚举常量,枚举类型的枚举元素在C中被当作常量处理,不能对其赋值,每一个枚举元素都代表一个整数,不能为浮点数等等,默认依次为0,1,2,3.....

这个数值只能在定义时显式的指定,以后不能更改,被指定的枚举元素的后面的元素的值依次等于前一个元素的值加1;

枚举元素是真正意义上的常量,我们是不能够通过取地址符拿到它的地址;

一个枚举类型的枚举元素可以直接使用,也可以定义枚举变量赋值后再使用;

例如:

#include <stdio.h>

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型变量!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: