首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
SAAS
ToB门户
了解全球最新的ToB事件
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
微博
Follow
记录
Doing
博客
Blog
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
排行榜
Ranklist
相册
Album
应用中心
qidao123.com ToB IT社区-企服评测·应用市场
»
论坛
›
大数据
›
数据仓库与分析
›
C 语言布局体中的函数指针与 Kotlin 高阶函数的对比 ...
返回列表
发新帖
C 语言布局体中的函数指针与 Kotlin 高阶函数的对比
[复制链接]
发表于 2025-4-20 14:29:00
|
显示全部楼层
|
阅读模式
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
×
在学习 C 语言的过程中,很多 Java/Kotlin 背景的开发者都会对布局体中出现的“函数指针”感到生疏。特别是当看到如下
代码
时:
struct Animal {
void (*speak)(void);
};
void dogSpeak() {
printf("Woof!\n");
}
int main() {
struct Animal dog;
dog.speak = dogSpeak;
dog.speak();
return 0;
}
复制
代码
这段
代码
中,布局体 Animal 中的 speak 并不是一个平常变量,而是一个“函数指针”。它的作用是:
指向一个函数,然后在合适的时机调用它
。这其实与我们在 Kotlin 中使用高阶函数的目标如出一辙。
一、C 中布局体里的函数指针
函数指针的语法大概略显复杂,但本质很简单:
void (*speak)(void) 表示一个函数指针,它指向一个没有参数、返回值为 void 的函数。
给它赋值时,只需要提供函数名(不加括号)。
调用时使用 布局体变量.函数指针() 的方式实行。
函数指针的最大利益是:
可以将函数“作为变量”赋值和传递,从而实现雷同回调、战略模式等逻辑。
二、Kotlin 中的高阶函数
Kotlin 提供了原生的高阶函数支持,好比下面这个例子:
fun runTwice(block: () -> Unit) {
block()
block()
}
fun main() {
runTwice { println("Hello") }
}
复制代码
这里,block: () -> Unit 就是一个“函数类型的参数”,你可以将任何匹配这个署名的 lambda 或函数传入它。
Kotlin 的高阶函数与 C 的函数指针的本质是一样的:
将函数作为“值”举行传递、赋值和调用
。
三、类比与思索
概念C 语言Kotlin函数作为变量函数指针高阶函数(函数类型)放入布局/对象中布局体中的函数指针成员类/对象中的函数属性调用方式对象.函数指针()对象.函数()使用目标实现回调、战略、接口模仿回调、DSL、扩展性逻辑
回复
使用道具
举报
返回列表
浏览过的版块
DevOps与敏捷开发
SQL-Server
物联网
linux
Java
石小疯
+ 我要发帖
登录后关闭弹窗
登录参与点评抽奖 加入IT实名职场社区
去登录
微信订阅号
微信服务号
微信客服(加群)
H5
小程序
快速回复
返回顶部
返回列表