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

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

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

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

    首先需要声明一个函数指针---标准原型是: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);
}  
      但是还有一种更绕的方式,比较难理解。这里不再详述,可以看C++primer的7.10.3深入讨论函数指针。


猜你喜欢

转载自blog.csdn.net/xiaopengshen/article/details/79369610
今日推荐