函数指针和指针函数是不是一个东西?

描述

函数指针和指针函数是不是一个东西?

这两个我们之前都有讲过,但是并没有放在一起比较过。

函数指针的本质是指针,就跟整型指针、字符指针一样,函数指针指向的是一个函数。

每个函数在内存中都会有一个地址,函数调用就是跳转到这个地址开始执行,而函数指针就是记录这个地址的变量。

指针函数  

定义起来稍微有点麻烦:

 

#include 


int test(int a)
{
    return a;
}


int main()
{
    int (*p)(int) = test;
    
    return 0;
}
比如test函数,想要记录他的地址,可以这样定义指针p:
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语言,务必得学会分析。 








审核编辑:刘清
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分