一个很蠢的实验,探讨typedef定义的函数类型和函数指针类型。

 

使用typedef定义函数类型和函数指针

  • 定义函数类型(例子)
typedef int (FuncType)(int, int);
  • 定义函数指针类型(例子)
typedef int (*pFuncType)(int, int);

使用函数类型的时候有一个注意的地方,如下面的程序

定义了一个函数变量func,编译的时候出错,赋值的时候等号左边必须是左值。

纳尼???

func居然不是左值,那么func到底是什么?

通过思考猜测:func也是个变量,但是func是一个用const修饰的变量,因此只能在定义的时候给func赋值一次。更改程序如下:

还是不行。

结论:通过FuncType func这样的定义方式,func不能赋值,不能初始化

根据错误提示,可知这样定义func相当于声明了一个int func(int, int),但是没有函数实现。

所以这像什么呢?

这像声明!!!

做下面的实验。

我们知道,当调用的函数在调用位置之后定义时,如果调用之前没有声明就会编译出错,函数没有声明。通常的解决方法如下:

在前面添加了声明后,就可以正常编译运行了。

重点来了

我们还可以用另外一种方式进行声明!!!如下:

我的天,还是失败了。但是错误提示很关键,说明FuncType不能对static函数进行声明,那么我们去掉看看。

哈哈哈哈,真的成功了。

虽然成功了,但是这个例子真的很蠢,不知道这样有什么用

 

所以,如果定义了函数类型不要FuncType func这样定义变量,它只能用来声明同名的非static函数用。请使用下面的方式定义变量:定义一个指针变量。

如果是这样,我们不如直接定义一个函数指针类型:

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值