函数指针 C++

来源:互联网 发布:知乎2016年度营销案例 编辑:程序博客网 时间:2024/06/06 01:33

       博主还是一名在校学生,在此也是跟大家分享一下自己学习方面的理解见解,如果大大们发现有什么错误的可以留言,大家讨论讨论,

毕竟大家都是来学习的嘛,言归正传。


我现在所说的是函数指针,说到函数指针可能有些人会和指针函数混淆的,先说说两者的区别吧:


指针函数:

顾名思义啦,大家对比一下吧

指针--函数    整形--函数   浮点型--函数  .....

就简单的说指针函数跟其他函数是一样的,不过的是指针函数的返回值是指针变量

或者是地址(int a;return &a 或者 int *a;return a;),指针指向地址的嘛,不行在看看它的声明吧:


int *abc(int a);//返回值一定是int类型的指针int ccc(int a);float bbb(float a);//类似等等之类都OK

格式:类型 *函数名(参数++);
//当然函数的参数也可以是多个


//--------------------------------------------------------------------------------------------------------------//
指针函数就到此为止了,下面讲讲函数指针了:
大概的说,指针指向的是变量的地址,而函数指针就是指向函数的地址。(当然函数指针用法也有要求滴)

先看看定义格式吧

void (*q)(int);void (*q)(int a);void (*q)(int ,int );void (*q)(int a,int b);int (*q)(int);int (*q)(int a);int (*q)(int ,int );float (*q)(float a,int b);//类似等等之类都OK


上面就有很多例子了,具体的格式如下:
格式:类型 (*名字)(参数1,参数2,参数3) //参数个数按要求的,具体看下面


现在说说要求的咯:

//图片一张下面


上面的图片都看见了吧,红色框的就是重点了
三个条件:
从左边开始第一框


1 它们的类型要相同
2 参数个数要相同
3 每个参数的类型都要对应相同


当然定义一个这样函数指针都可以对应多个符合要求的函数啦


void (*q)(int ,int );void abc(int a,int b);void aaa(int a,int b);q=&abc;q=&aaa;//这样会会覆盖上面的

下面就看看函数指针的具体调用/用法吧:

//可以去调试的哦,亲#include<iostream>using namespace std;void abc(int a,int b){cout<<a<<" "<<b<<endl;}void (*p)(int ,int );void (*q)(int ,int );int main(){abc(10,20);p=abc;q=&abc;(*p)(1,2);q(3,4);return 0;}

下面讲讲它的简单化/同义化:
typedef 这个关键词大家应该知道了吧,不知道的去问问度娘吧,就大概2分钟的时间就知道了
下面又是例子代码了:

//这些代码看看就知道了,就不多讲了#include<iostream>using namespace std;typedef void (*T)(int ,int);void abc(int a,int b){cout<<a<<" "<<b<<endl;}int main(){T p;T q;abc(10,20);p=abc;q=&abc;(*p)(1,2);q(3,4);return 0;}

身为函数指针当然也能做函数的参数来使用啦:
函数A的参数其中一个是函数指针来的,函数A用函数指针调用函数指针指向的函数叫回调函数
就如:

int abc(int a[],int n);int abc(int (*q)(int),int n);

像数组、指针等等变量做函数的参数一样


//--------------------------------------------------------------------------//

下一篇会详细讲讲回调函数的

欢迎大家来提意见滴^_^

原创粉丝点击