C++ 指针(三)函数指针

本节将对函数指针进行简单的介绍。

一、函数指针的声明

先来了解一下函数的地址我们该怎么获取。其实和数组差不多,函数名指代的就是函数的地址。

接着,看一下如何声明函数指针:

int func(float);//定义的函数
int (*p)(float);//声明的函数指针
p = func;//对指针进行初始化赋值

从上面的代码不难发现规律,函数指针的声明就是将原来的函数名改为(*p),其中p就是指针变量的名字。

那为什么要这样子设置呢?我们先想一下当我们声明普通数据类型的指针的时候,我们需要指定该指针所指向的区域的数据类型。同理,当我们声明函数指针的时候,同样需要指定函数的类型。函数的类型由其返回值和参数列表确定,所以,在声明函数指针的时候,需要指出该指针指向的函数的返回值类型以及参数列表。这里需要注意的是,函数指针的返回值类型和参数列表必须和原函数一致,否则会导致赋值失败。

其次为什么需要将指针用括号括起来?这就涉及到了优先级的问题,*操作符的优先级低于()。直观地来看,如果我们定义的是:

int *p(float);

那么这其实是一个返回值为int*类型的函数,所以我们需要加括号,从而能够正确地声明函数指针。

其实,如果 你怕自己写错声明,那么可以使用C++的类型推断功能——auto,使用它的代码如下:

int func(float);//定义的函数
auto p = func;//对指针进行声明并初始化赋值

二、函数指针的使用

和普通变量指针一样,我们可以使用*操作符来进行解引用操作,需要注意的是添加括号,确保优先级:

int func(float);//定义的函数
int (*p)(float);//声明的函数指针
p = func;//对指针进行初始化赋值
int x = (*p)(6.0);

此外还有一种使用方式:

int func(float);//定义的函数
int (*p)(float);//声明的函数指针
p = func;//对指针进行初始化赋值
int x = p(6.0);

但是建议使用第一种方式,这种方式有助于代码的阅读。让读者知道此处使用的是函数指针而不是函数。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值