函数指针和指针函数是不是一个东西?
这两个我们之前都有讲过,但是并没有放在一起比较过。
函数指针的本质是指针,就跟整型指针、字符指针一样,函数指针指向的是一个函数。
每个函数在内存中都会有一个地址,函数调用就是跳转到这个地址开始执行,而函数指针就是记录这个地址的变量。
定义起来稍微有点麻烦:
#include比如test函数,想要记录他的地址,可以这样定义指针p:inttest(inta) { return a; } int main() { int (*p)(int) = test; return 0; }
int (*p)(int) = test;p是个指针,指向函数,函数有一个int类型的参数,函数的返回值是int。
调用函数的时候,不仅可以通过函数名来调用,也可以通过函数指针p来调用:
test(1); p(1);函数指针有什么用?
他的用处很大,比如C语言里面的回调函数,或者在结构体里面存放函数,都可以用函数指针来解决,不清楚的,可以翻翻以前的视频。
指针函数的本质是函数,就像整型函数返回的是整型一样,指针函数返回的是指针。
于是我们可以随手写一个数组,返回数组的名字,因为数组名就是地址。
int *test() { int array[5] = {0}; return array; }这是一个典型的错误,切记不能返回局部变量的地址,因为函数调用完毕,内存释放,即使返回了这个地址,也不能使用。
可以返回堆空间地址,也可以返回全局变量地址,或者是静态变量地址都可以,这种返回地址的函数就叫指针函数。
那把这两个概念结合起来会怎么样?
可以,就叫指针函数指针:
int *(*p)() = test;意思就是定义一个指针,让他指向刚才的指针函数,这就是C语言中的复杂类型声明,开发中确实很少会用到,但是笔试中出现的概率高达80%,所以,不要觉得它没用,想要学好C语言,务必得学会分析。
审核编辑:刘清
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
函数指针
+关注
关注
2文章
56浏览量
3775 -
指针函数
+关注
关注
0文章
10浏览量
2741
原文标题:两分钟来搞懂函数指针和指针函数
文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
指针作为函数参数
指针作为函数参数
大多数C程序员开始使用指针时是用它们实现函数的参数,所谓可变参数。为了理解可变参数是如何工作的,我们看看在C语言中如何执行一
发表于 07-29 11:49
•2694次阅读
评论