首页 > 其他 > 详细

函数指针与回调函数

时间:2020-01-02 15:10:46      阅读:100      评论:0      收藏:0      [点我收藏+]

2020年1月2日13:46:26

函数指针

一句话解释什么是函数指针.
函数指针本质是个指针,这个指针指向一个函数.
如何声明函数指针呢?
那我们考虑一下如何声明一个指针,如何声明一个函数,再将两者结合起来.
声明指针:
int *p;
声明函数:
int func(int a);//声明了一个返回值为int类型,参数为int的函数func

现在将两者结合起来:
int *funcpointer(int a);//按照指针的声明规则来读,应该是:这句话声明了一个int类型的指针funcpointer,这个指针指向了一个 参数为int的返回值为int的函数
现在就很明确了我们声明对了.
现在我们再来看看这个函数指针怎么使用.
在解释怎么使用之前,我们来看看常见的指针是怎么使用的.

int a = 10;
int *p = NULL;
p = &a;

上面的三句话,我们很明确,哦 原来这个指针p指向了和它同类型的内容,这里的同类型是int.
所以指针的用法是:指针应该指向一个同类型的内容(地址)啊.

如何使用函数指针

那现在我们来看看函数指针应该怎么使用.
一开始我们就说了一句话:

函数指针本质是个指针,这个指针指向一个函数.

这句话向我们传递的内容是:这个函数指针 应该指向一个内容或者说应该指向一个地址,而这个地址应该是一个函数的首地址.

类比数组,我们知道数组指针的这个指针应该指向一个和自己同类型的数组.这个类型就是形式上一致的,比如说数组的行数与数组里存的内容的类型.
到函数指针这里也同样是这个道理.那函数指针的同类型应该有谁呢?

我们看看函数的组成:返回值 函数名(参数列表);
可以看出,两个函数同类型说的是返回值一样,参数列表一样.这两个部分一样的函数,我们称之为同类型的函数.
那现在,我们声明了这个类型的指针.就意味着:声明的这个类型的函数指针,就应该也很合理的指向这样类型的函数

说了这么多的文字,可能要晕了.
那现在我们用代码来解释这个函数指针怎么用.

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

//声明一个函数指针
int *funcpointer(int a);

//给函数指针赋值
funcpointer = func;
//调用
funcpointer(10);

这个使用就是简单的赋值.这里需要注意,我们使用指针的时候一般都是使用&符号取地址,这里的函数名指向的就是函数的地址,所以这里不用&了.
下面的调用才是使用函数指针.
这句话funcpointer(10);func(10);效果是一样的,没有本质的不同.都是调用了func(10);.
有没有一种脱裤子放屁的感觉???
上面的使用,肯定是脱裤子放屁.
真正发挥函数指针的能力的是回调函数.在了解学习回调函数之前先来看一个小问题函数指针的声明

关于函数指针的声明

回调函数

函数指针与回调函数

原文:https://www.cnblogs.com/dhu121/p/12132725.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!