Posted on 2010-11-29 13:59
幻海蓝梦 阅读(1257)
评论(0) 编辑 收藏 所属分类:
C语言学习
在现实生活中,信息的概念可能是长度,数量和面积等。在C语言中,信息被抽象为int、float和double等基本数据类型。从基本数据类型名称上,
不能够看出其所代表的物理属性,并且int、float和double为系统关键字,不可以修改。为了解决用户自定义数据类型名称的需求,C语言中引入类
型重定义语句typedef,可以为数据类型定义新的类型名称,从而丰富数据类型所包含的属性信息。
typedef的语法描述
typedef
类型名称 类型标识符;
typedef为系统保留字,“类型名称”为已知数据类型名称,包括基本数据类型和用户自定义数据类型,“类型标识符”
为新的类型名称。例如:
typedef double LENGTH;
typedef unsigned int COUNT;
定
义新的类型名称之后,可像基本数据类型那样定义变量。例如:
typedef unsigned int COUNT;
unsigned
int b;
COUNT c;
typedef 的主要应用有如下的几种形式:
1) 为基本数据类型定义新的类型名。例如:
typedef
unsigned int COUNT;
typedef double AREA;
此种应用的主要目的,首先是丰富数据类型中包含的属
性信息,其次是为了系统移植的需要,稍后详细描述。
2) 为自定义数据类型(结构体、公用体和枚举类型)定义简洁的类型名称。例如:
struct
Point
{
double x;
double y;
double z;
};
struct Point
oPoint1={100,100,0};
struct Point oPoint2;
其中结构体struct
Point为新的数据类型,在定义变量的时候均要有保留字struct,而不能像int和double那样直接使用Point来定义变量。如果经过如下的
修改,
typedef struct tagPoint
{
double x;
double y;
double
z;
} Point;
定义变量的方法可以简化为
Point oPoint;
由于定义结构体类型有多种形式,因此可以修改
如下:
typedef struct
{
double x;
double y;
double z;
}
Point;
3) 为数组定义简洁的类型名称。例如,定义三个长度为5的整型数组,
int
a[10],b[10],c[10],d[10];
在C语言中,可以将长度为10的整型数组看作为一个新的数据类型,再利用typedef为其重
定义一个新的名称,可以更加简洁形式定义此种类型的变量,具体的处理方式如下:
typedef int INT_ARRAY_10[10];
typedef
int INT_ARRAY_20[20];
INT_ARRAY_10 a,b,c,d;
INT_ARRAY_20 e;
其中
INT_ARRAY_10和INT_ARRAY_20为新的类型名,10 和20
为数组的长度。a,b,c,d均是长度为10的整型数组,e是长度为20的整型数组。
4)
为指针定义简洁的名称。首先为数据指针定义新的名称,例如
typedef char * STRING;
STRING
csName={“Jhon”};
其次,可以为函数指针定义新的名称,例如
typedef int (*MyFUN)(int
a,int b);
其中MyFUN代表 int *XFunction(int a,intb)类型指针的新名称。例如
typedef
int (*MyFUN)(int a,int b);
int Max(int a,int b);
MyFUN *pMyFun;
pMyFun=
Max;
在使用typedef时,应当注意如下的问题:
1)
typedef的目的是为已知数据类型增加一个新的名称。因此并没有引入新的数据类型。
2) typedef
只适于类型名称定义,不适合变量的定义。
3) typedef 与#define具有相似的之处,但是实质不同。
提示 #define AREA double 与 typedef double AREA
可以达到相同的效果。但是其实质不同,
#define为预编译处理命令,主要定义常量,此常量可以为任何的字符及其组合,在编译之前,将此常量出现的所有位置,用其代表的字符或字符组合无条件
的替换,然后进行编译。typedef是为已知数据类型增加一个新名称,其原理与使用int double等保留字一致。
原文: http://blog.chinaunix.net/u2/75045/showart_1120891.html