c++ 函数指针和指针函数

49 篇文章 2 订阅

函数指针/指针函数 的重点就在后面的两个字,例如,函数指针的重点就是 指针,它是一个指针。指针函数的重点就是函数,它是一个函数。

数组指针和指针数组同理

总结一点就是,重点在于后面的两个字,后面的两个字决定了它是什么。

指针函数

本质是一个函数,函数返回类型是某一类型的指针

标识符 *函数名(参数表)

如 int * func(int a );

int *p = func(); 

函数指针

形式1:返回类型(*函数名)(参数表)    重点在与()

函数指针的声明方法为:

返回值类型 ( * 指针变量名) ([形参列表]);

注1:“返回值类型”说明函数的返回类型,“(指针变量名 )”中的括号不能省,括号改变了运算符的优先级。若省略整体则成为一个函数说明,说明了一个返回的数据类型是指针的函数,后面的“形参列表”表示指针变量指向的函数所带的参数列表。例如:

int func(int x); /* 声明一个函数 */

int (*f) (int x); /* 声明一个函数指针 */

f=func; /* 将func函数的首地址(即函数地址)赋给指针f */

或者使用下面的方法将函数地址赋给函数指针:

f = &func;

赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。

 函数地址就是函数名(后面不带参数),如果带参数就是函数返回值了  int func(int a ); func就是函数地址,可以把函数地址做为函数的参数进行传递。

注2:函数括号中的形参可有可无,视情况而定

float functionadd(int a, float b);

float functionadd(int a, float b)
{
    return  a + b;
}

float(*pfuna)(int, float) ;
pfuna = functionadd;
或者
float(*pfuna)(int, float) = functionadd;

pfuna(1,1.3);

 形式2:typedef

typedef   返回类型(*函数指针类型名称)(参数列表)

进一步使用typedef进行简化 ,用在给函数定义别名别名就是函数指针类型名称。

float functionadd(int a, float b);

float functionadd(int a, float b)
{
    return  a + b;
}

typedef float (*pfuna)(int, float);  //别名
pfuna  fa = functionadd;//赋值
fa(1, 1.3);//应用

形式3.使用using 的方式替换typedef   

参考:c++11中using的使用_小飞侠hello的博客-CSDN博客_c++ using 函数指针

float functionadd(int a, float b);

float functionadd(int a, float b)
{
    return  a + b;
}

using pfuna = float(*)(int, float);

pfuna  fa = functionadd;

fa(1, 1.3);

形式4. auto. 直接粗暴 auto 

float functionadd(int a, float b);

float functionadd(int a, float b)
{
    return  a + b;
}

auto fa = functionadd;

fa(1, 1.3);

使用函数指针

1.调用函数 :有两种方式

a. 函数指针名称 (实参列表)       int b = pf(1);

b.(*函数指针名称)(实参列表)int b = *pf(1);

2.作为参数传递

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值