typedef用法与函数指针别名

typedef声明,简称typedef,为现有类型创建一个新的名字,或称为类型别名。

typedef不仅可以为变量定义别名,可以为struct定义别名,还可以为函数指针定义别名。

一.为变量定义别名

typedef   int   size;

这样就为int定义了别名size

该用法很常见且比较简单

特殊地,当使用typedef为数组定义别名时

              typedefintPoint[2];

              这样就可以把一个int[2]的数组定义为Point。使用时:

Point	thePt;
thePt[0] = 0;
thePt[1] = 0;

二.为 struct定义别名

对一个struct

struct	POINT
{
	int x;
	int y;
}
对于C语言,要定义该结构体的变量,需要这样定义:

struct      POINT    pt;

前面的struct是不能省略的。

因此,才使用typedef为其定义别名:

typedef    struct POINT PT;

从而可以:

PT   pt;

所以,常见到的用法:

typedef 	struct	//这一行也可写作:typedef 	struct POINT
{
	int x;
	int y;
} PT;
其实是两部分功能写在了一起,分别是:

①    定义结构体:

struct	POINT
{
	int x;
	int y;
}
②    为结构体定义别名:

typedef	struct POINT	PT;

 但是,这些仅仅是因为C语言的限制才导致了这样的用法。实际上,C++解决了这个问题,允许用户不加struct关键字来定义一个结构体变量。所以该用法在C++中可以不使用。

三.为函数定义别名

typedef int (*MYFUN)(int, int);

上面的例子定义MYFUN是一个函数指针, 函数类型是带两个int 参数, 返回一个int

 

分析这种形式的定义的时候可以用下面的方法:
先去掉typedef和别名,剩下的就是原变量的类型.
去掉typedefMYFUN以后就剩:

int (*)(int, int)

      

       注意该用法与前面的用法不太一样。前面的用法都是

       typedef  原变量名新变量名

       但该用法却是:

       typedef  返回值新函数名函数参数

       该新函数名代表了typedef后面的整个表达式。

      

       将一个函数使用typedef定义了一个新函数名,一般该新函数名是一个函数指针。该新函数名可以像一个类名那样使用,来定义变量:

MYFUN	pFun1, pFun2;
       然后这些变量在使用之前必须被赋值:

int 	add(int a, int b)
{
	return (a + b);
}
int 	sub(int a, int b)
{
	return (a - b);
}
pFun1 = add;
pFun2 = sub;
 被赋值后的函数指针变量就有了实体,然后直接使用即可:

cout << pFun1(1, 2) << endl;
cout << pFun2(1, 2) << endl;


评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值