C++typedef的各种详细用法
C/C++ typedef的各种详细用法
typedef的语法描述
在现实生活中,信息的概念可能是长度,数量和面积等。在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 的主要应用形式
typedef 的主要应用有如下的几种形式:
1) 为基本数据类型定义新的类型名。
2) 为自定义数据类型(结构体、公用体和枚举类型)定义简洁的类型名称。
3) 为数组定义简洁的类型名称。
4) 为指针定义简洁的名称。
,为基本数据类型定义新的类型名.txt,自定义数据类型定义简洁的类型名
称.txt,为数组定义简洁的类型名
称.txt,为指针定义简洁的名称.txt
为基本数据类型定义新的类型名
TAG:结构体,类型重定义typedef,typedef 的主要应用形式
typedef unsigned int COUNT;
typedef double AREA;
此种应用的主要目的,首先是丰富数据类型中包含的属性信息,其次是为了系统移植的需要,稍后详细描
述。
自定义数据类型定义简洁的类型名称
TAG:结构体,类型重定义typedef,typedef 的主要应用形式
为自定义数据类型(结构体、公用体和枚举类型)定义简洁的类型名称。例如: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;
为数组定义简洁的类型名称
TAG:结构体,类型重定义typedef,typedef 的主要应用形式
为数组定义简洁的类型名称。例如,定义三个长度为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的整型数组。
为指针定义简洁的名称
TAG:结构体,类型重定义typedef,typedef 的主要应用形式
为指针定义简洁的名称。首先为数据指针定义新的名称,例如
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;
define的基本用法
pMyFun= Max;
使用 typedef注意的问题
在使用typedef时,应当注意如下的问题:
1) typedef的目的是为已知数据类型增加一个新的名称。因此并没有引入新的数据类型。
2) typedef 只适于类型名称定义,不适合变量的定义。
3) typedef 与#define具有相似的之处,但是实质不同。
提示 #define AREA double 与 typedef double AREA 可以达到相同的效果。但是其实质不同,
#define为预编译处理命令,主要定义常量,此常量可以为任何的字符及其组合,在编译之前,将此常量
出现的所有位置,用其代表的字符或字符组合无条件的替换,然后进行编译。typedef是为已知数据类型
增加一个新名称,其原理与使用int double等保留字一致。
typedef和 define 具体的详细区别
1) #define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带
入,只有在编译已被展开的源程序时才会发现可能的错误并报错。例如:
#define PI 3.1415926
程序中的:area=PI*r*r 会替换为3.1415926*r*r
如果你把#define语句中的数字9 写成字母 g 预处理也照样带入。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。