函数指针以及成员函数指针1

1、 函数指针

(1)函数指针申明如下:

float (*my_func_ptr)(int, char *);
// 为了更好地理解,强烈建议使用typedef声明.
// 当函数指针是一个函数的参数时,容易造成混淆.
//声明应该是
typedef float (*MyFuncPtrType)(int, char *);
MyFuncPtrType my_func_ptr;
注:1) 函数指针参数组合不同,则函数指针类型也是不同的。2)函数调用约定( __cdecl __stdcall , and  __fastcall) 不同,函数指针类型也是不同的。

(2)函数指针my_func_ptr指向函数float some_func(int, char*)  : 

my_func_ptr = some_func;

(3)使用函数指针调用存储的函数 :

(*my_func_ptr)(7, "Arbitrary String");

(4)特性:

1)不同类型函数指针之间可以互相转换,但是函数指针不能转换为一个void*类型的数据指针
2)函数指针能被赋值为0,以表示为一个空指针。

3)全范围的比较操作(==!=<><=>=)适用于函数指针,通过使用"== 0"或者隐式转换为bool类型来测试函数指针是否为空指针。

4)函数指针能够作为一个非类型模板参数,这与类型模板参数有根本性区别,也和整型非类型参数不同,它是基于名字而不是类型或者值来实例化的。(这个不是所有编译器支持)

(5)总结:

1)函数指针应用有:库函数qsort的参数,Windows回调函数等等。

2)函数指针仅仅是"code pointers",它表示一段汇编程序的开始地址。

3)不同类型函数指针存在的意义仅仅是为了确保使用了正确的调用约定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值