前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言(函数指针)

C语言(函数指针)

作者头像
用户2617681
发布2019-08-08 10:32:22
3.7K0
发布2019-08-08 10:32:22
举报
文章被收录于专栏:秘籍酷秘籍酷

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

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');

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 秘籍酷 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档