xiaohushiba 2015-06-25 10:04 采纳率: 100%
浏览 1713
已采纳

指向函数的指针不需要定义?

我看《C程序设计语言》书,看到103页时,有一个关于指向函数的指针把我看糊涂了。如图所示图片说明,函数指针就是里面那个comp。可我找了半天也找不到它在哪里定义的,那么当调用它时它是怎么转换的呢?比如那个?:返回的是numcmp,那么最后是怎么转到numcmp函数里面呢?

  • 写回答

3条回答 默认 最新

  • 纹枰老妖 2015-06-25 10:29
    关注

    题主弄混了一个关键的概念:指向函数指针的本质是什么,在这里也就是您所说的comp。
    请注意,这里的comp其实是一个变量,一个指针变量。而不是楼主所认为的函数!它不需要包含任何代码,因为它是一个指针变量。当这个comp被赋值以后【一般都是赋一个函数代码段地址值】,那么运行时,有关comp的代码语句都会直接把comp换成这个地址值,比如您截图中的numcmp,当把它赋值给comp以后,以后再遇到comp时,就会直接调用numcmp,而不是从comp“函数里”转到numcmp。

    请题主看下面的图片代码:
    图片说明

    相信您会看明白,这里的ptr【comp的兄弟,另一个函数指针】,其实是完全被当成一个指针变量赋值的。
    当然,也可以在声明时就给ptr初始化,不过格式要写成这样:【int (*ptr)(int a, int b) = fun;】,至于ptr的后面为什么要跟一对参数列表,只是为了在编译时检查错误,看看被指向的函数是不是跟指向函数指针声明时相匹配。它虽然有参数表,但仅仅是貌似函数而已,记住,披着羊皮的狼,是狼,不是羊!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 安装svn网络有问题怎么办
  • ¥15 Python爬取指定微博话题下的内容,保存为txt
  • ¥15 vue2登录调用后端接口如何实现
  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥15 latex怎么处理论文引理引用参考文献