C++深入理解(3)------函数指针(读书笔记)

本文介绍了函数指针的基本概念及使用方法,并通过实例详细解释了如何定义和使用函数指针,包括将其作为数组元素进行操作的过程。同时,探讨了函数指针在回调函数中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    本节将记录函数指针,也就是指向函数的指针的大致用法,函数指针用处最多的要数回调函数,当然也有其他的用途。

    在编译为二进制文件后,将代码存储在内存中,所以对应的函数也有自己的地址,也就可以使用指针来操作它!!

    下面将讲解使用函数指针的具体操作:

    首先需要声明一个函数指针---标准原型是:double (*p) (int )。然后就可以赋值了。如下代码

double (*p)(int);
double func(int a);
p=func;
double tmp=(*p)(3);

    当然我还见过一种更高明的用法,可以将指针定义为指针数组,保存多个函数指针,然后可以像遍历数组一样来遍历函数,具体代码如下:

	//函数指针
	typedef BYTE (*pGetAllCardFun)(BYTE const [], BYTE const , BYTE[], BYTE &);

	//指针数组
	pGetAllCardFun GetAllCardFunArray[4] ;
	GetAllCardFunArray[0] = &GetAllBomCard ;		//炸弹函数
	GetAllCardFunArray[1] = &GetAllLineCard ;	//顺子函数
	GetAllCardFunArray[2] = &GetAllThreeCard ;	//三条函数
	GetAllCardFunArray[3] = &GetAllDoubleCard ;	//对子函数
        for(int i=0;i<4;i++)
        {                   
            pGetAllCardFun pTmpGetAllCardFun = GetAllCardFunArray[i]; 
            (*pTmpGetAllCardFun)(cbTmpCardData, cbTmpCardCount, cbGetCardData, cbGetCardCount);
        }

  其中的typedef非常重要,也是比较难理解的地方,博主至今也没有理解其根本原理,不过其根本原理如下:

 
//函数指针
BYTE (*pGetAllCardFun[4])(BYTE const [], BYTE const , BYTE[], BYTE &);
//指针数组	
pGetAllCardFun[0] = GetAllBomCard ;		//炸弹函数
pGetAllCardFun[1] = GetAllLineCard ;	//顺子函数
pGetAllCardFun[2] = GetAllThreeCard ;	//三条函数
pGetAllCardFun[3] = GetAllDoubleCard ;	//对子函数
for(int i=0;i<4;i++)    
{            
     (*pGetAllCardFun[i])(cbTmpCardData, cbTmpCardCount, cbGetCardData, cbGetCardCount);
}  

BYTE (*pGetAllCardFun[4])(BYTE const [], BYTE const , BYTE[], BYTE &);
//指针数组	
pGetAllCardFun[0] = GetAllBomCard ;		//炸弹函数
pGetAllCardFun[1] = GetAllLineCard ;	//顺子函数
pGetAllCardFun[2] = GetAllThreeCard ;	//三条函数
pGetAllCardFun[3] = GetAllDoubleCard ;	//对子函数
for(int i=0;i<4;i++)    
{            
     (*pGetAllCardFun[i])(cbTmpCardData, cbTmpCardCount, cbGetCardData, cbGetCardCount);
}  

      但是还有一种更绕的方式,比较难理解。这里不再详述,可以看C++primer的7.10.3深入讨论函数指针。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值