函数指针简介

什么是函数指针

  • 函数名就是指向函数加载到内存的入口地址
  • 函数指针,首先明确它是一个指针变量,其次它存值的就是函数的入口地址
  • 对函数名取地址得到的是函数的入口地址,对函数指针取地址得到的是指针变量的地址
  • 函数指针的好处在于,可以将函数当成一个变量来进行传递或返回

语法

//声明
int *ptr;//普通指针变量的声明
int (*pFun) ();//函数指针的声明,*pFun表示是一个指针变量,int() 表示是一个int返回类型的,参数列表为空的函数。
//赋值
int fun(){cout<<"Hello"<<endl;}
pFun = fun;
pFun = &fun;//也可以,直接写fun返回的也是函数入口地址,加上取地址符也是返回函数入口地址
//调用
pFun();
(*pFun)();//比较推荐这种用法

复杂用法

//带参数的函数指针
void fun(int, int);
void (*pFun)(int, int);
pFun = fun;

//返回值是指针的函数指针
void *fun(int, int);
void *(*pFun)(int, int);
pFun = fun;

//参数是函数指针
void (*pFun)();
void fun(void (*pFun)(), int);
void (*ppFun)(void (*pFun)(), int);
ppfun = fun;

//返回值是函数指针
void (*fun())() ;//已经是非人类写法了,此时一般换一种写法
typedef void (*pFun)();//将pFun定义为一个函数指针类型(void ()类型)
pFun fun();//pFun就相当于一个类型

//函数指针数组
typedef void (*pFun)();
pFun fun_ptr_arry[10];

类的函数指针

  • 静态成员函数
//静态成员函数没有this指针,和上面的基本一样,唯一不同的是在赋值时要添加类名限定
class A
{
    static void fun(){}
};
void (*pFun)();
pFun = A::fun();
  • 成员函数
class A
{
    void fun(){}
};
void (A::*pFun)();//必须加上类名限定
pFun = A::fun;//赋值也必须加上类名限定
pFun();//这样是错误的,因为这是类的成员函数,类的成员函数调用必须要找到this指针(也就是生成的具体对象)
A a;
(a.*pFun)();//正确
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值