专栏首页秘籍酷C语言(函数指针)

C语言(函数指针)

前几天在佛科大,惊闻某为同学学习指针学了一年,且未的要领!我当时除了深深吃了一斤之外,瞬间觉得自己的工作是如此的重要和迫切!对于指针这类调皮鬼,今天来聊聊函数指针这个特殊的一员。

C语言中,指针是一类变量,可以有指向int的指针,可以有指向float的指针,可以有指向结构体的指针,还有一类非常重要的:指向函数的指针。

比如有如下函数:

void function(int a, char b) { ... ... }

函数是什么?将以上C语言源代码编译,生成汇编文件给你看看什么“函数”

look:

注意到第5行,显然函数 function 就是一个标签,就是其所包含的函数体代码块的入口,就是函数体第一行代码的地址。看出来了吧,对!函数就是地址。

因此,function就是一个指针,一个指向其本身函数体第一行的指针。所以当我们想要定义一个指针指向这个函数的时候,就可以这么写:

void (*p)(int a, char b) = function;

此时,p跟fucntion就是一样的。那么我们怎么去调用这个函数呢?look:

function(100, 'x'); p(100, 'x');

可见,函数名就是指针,用起来是完全一样的。

当然,C语言为了让初学者不至于懵圈,发出这样的疑问:

“咦!?既然是指针,赋值怎么不需要取址? 取目标怎么不需要解引用?”

甭着急,你完全可以这么写:

void (*p)(int a, char b) = &function; function(100, 'x'); (*p)(100, 'x');

最终结论:函数名就是函数指针,使用这种指针可以跟普通指针完全一样,取址、解引用。但是他们又有特殊待遇,可以不用取址符,也不用解引用符。

本文分享自微信公众号 - 秘籍酷(mijiku040),作者:林世霖

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C语言(二维数组)

    有同学在面对二维数组的时候,常常会犯浑。尤其是使用函数传参的时候,有老师讲到一维数组传参后就等价于一级指针,部分同学举一反三自学成才,想当然地认为二维数组传参后...

    用户2617681
  • 居然还有这种操作?

    一般而言我们会认为,对于任何指针p,表达式*p的含义就是取p的目标,但上题中,这三行的执行结果是:

    用户2617681
  • 文件IO(文件指针)

    有人总是以为所谓的文件指针就是一个指向文件的指针,其实文件指针是一种指向类型为FILE结构体的指针,只不过这个结构体内部包含了代表文件的描述符而已。

    用户2617681
  • 【编程基础】C语言指针函数和函数指针

    往往,我们一提到指针函数和函数指针的时候,就有很多人弄不懂。下面详细为大家介绍C语言中指针函数和函数指针。 一、指针函数 当一个函数声明其返回值为一个指针时,实...

    程序员互动联盟
  • JavaScript模式 读书笔记三

    函数是第一类对象 first-class object,可以作为带有属性和方法的值以及参数进行传递。

    lilugirl
  • 深入浅出Javascript闭包

    闭包(closure)是 Javascript 语言的一个难点,面试时常被问及,也是它的特色,很多高级应用都要依靠闭包实现。本文尽可能用简单易懂的话,讲清楚闭包...

    前端博客 : alili.tech
  • 空指针 到底是什么意思?

    各位,前段时间我们有推文介绍过野指针和悬空指针,那C中还有一个叫做空指针的名词,它究竟是指什么呢,今天就跟大伙聊聊这个空指针。

    7089bAt@PowerLi
  • 视频流媒体平台编译中如何运用Go语言指针?

    本文讲的也是我们在编译流媒体平台EasyNVR的时候,碰到的go语言指针问题,就打算为大家介绍一下Go语言指针的运用。

    EasyNVR
  • 「学习笔记」C语言(二):指针篇

    这是我大一暑假时系统学习谭浩强第三版《C程序设计》时写下的笔记。也正是因为那一次耗时整整一个星期系统性地学习这本书,才奠定了我现在的编程基础和逻辑...

    悠风
  • 基础知识 | 每日一练(59)

    士人有百折不回之真心,才有万变不穷之妙用。立业建功,事事要从实地着脚,若少慕声闻,便成伪果;讲道修德,念念要从虚处立基,若稍计功效,便落尘情。 ...

    闫小林

扫码关注云+社区

领取腾讯云代金券