股票

C++指针函数

英文是 a pointer to a Function

一个指向函数的指针,中文叫指针函数还是函数指针,按我的理解是,函数类型应该是指针函数,与普通函数区分开;函数指针估计叫做函数的指针,表明指针函数中的函数有指针,而不普通函数没有。

首先看函数定义:

double pam(int);

函数定义的时候,pam表示函数pam()的地址,注意pam是地址,pam()才是函数。函数调用的时候:

process(think); // 传递函数think()的地址给函数process()

process(think()); // 传递函数think()的返回值给函数process()

但是我用cout输出的时候,输出pam给的结果是个bool类型值1,&pam给的结果是函数地址。说明pam虽然表示地址,但是跟函数的地址还是有区别的,比较绕口,但记住这点,后面有用。

如果用指针 *pf 替换pam,即定义了函数指针:

double (*pf)(int);

注意:*pf是函数,pf是地址(指针). pf指向一个函数,函数名字是(*pf),相pf相当于 &pam;*pf 相当于pam。

(*pf)括号不可少

double (*pf)(int); // pf 指向函数的指针,返回double类型

double * pf(int); // pf()是一个函数,返回double * 类型,这样看double*写一起比较好

指针函数定义之后,可以将指针指向函数,即:

double pam(int);

double (*pf)(int);

pf = pam; // pf 指向函数pam()

记得之前说过的,pam是地址,所以不需要加&;但是,因为&pam也是函数地址,所以pf = &pam,两个含义相同!

如果想调用指针函数,直接调用函数地址即可,定义调用函数的时候:

void estimate(int lines, double (*pf)(int));

第二个参数就是定义指向函数的指针,即指针函数,这个函数的参数是个int类型的数据。

estimate(50, pam); // 函数调用告诉estimate()调用 pam()

传递的只是地址。

定义了指针函数之后就可以像普通函数一样使用

double pam(int);

double (*pf)(int);

pf = pam;

double x = pam(4);

double y = (*pf)(5); // 使用指针pf调用函数pam()

特别的,记得pam和&pam的区别吗?但是指向的时候两个功能是相同的!同理,调用函数的时候*pf和pf也可以通用:

double y=pf(5);

打赏
原文链接:,转发请注明来源!

发表评论