当前位置: 首页 > wzjs >正文

笨鸟网站开发一站式发稿平台

笨鸟网站开发,一站式发稿平台,wordpress主题wpgo,西安seo关键词排名优化在学习 C 语言的过程中,很多 Java/Kotlin 背景的开发者都会对结构体中出现的“函数指针”感到陌生。特别是当看到如下代码时: struct Animal {void (*speak)(void); };void dogSpeak() {printf("Woof!\n"); }int main() {struct Animal dog;d…

在学习 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、扩展性逻辑

🎯 本质对齐:

C 的函数指针Kotlin 的高阶函数,本质都是“把函数当变量传来传去”,用来实现回调、事件处理、状态切换等逻辑的解耦

📌 下面我们一一对比一下:


✅ 1. 回调机制 Callback

🧠 C 的函数指针实现回调:
void onDataReceived(void (*callback)(int)) {int data = 42;callback(data);
}void printData(int x) {printf("Received: %d\n", x);
}int main() {onDataReceived(printData);
}
🧠 Kotlin 的高阶函数实现回调:
fun onDataReceived(callback: (Int) -> Unit) {val data = 42callback(data)
}fun main() {onDataReceived { println("Received: $it") }
}

📌 一模一样的使用场景,只是 Kotlin 更安全、更语义清晰。


✅ 2. 线程回调 / 异步通知

🧠 C 中常用于线程启动函数传递:
void* thread_func(void* arg) {printf("Thread running...\n");return NULL;
}pthread_t t;
pthread_create(&t, NULL, thread_func, NULL);
🧠 Kotlin 用 Thread + Lambda 更优雅:
Thread {println("Thread running...")
}.start()

✔️ Kotlin 的 Lambda 本质就是回调函数传给线程入口。


✅ 3. 状态机中的动作抽象(状态 -> 函数映射)

🧠 C 用函数指针数组管理状态:
void stateA() { printf("A\n"); }
void stateB() { printf("B\n"); }void (*states[2])() = {stateA, stateB};int main() {int current = 0;states[current]();  // 调用状态A
}
🧠 Kotlin 用 Map 或函数引用也一样:
val stateMap: Map<String, () -> Unit> = mapOf("A" to { println("A") },"B" to { println("B") }
)fun main() {val current = "A"stateMap[current]?.invoke()
}

✔️ Kotlin 的函数也是变量,完全可以当成状态管理工具。


四、小结

  • C 的函数指针虽然语法复杂,但功能强大,可以动态指定调用的函数。
  • Kotlin 的高阶函数使用更灵活简洁,是现代语言的核心能力之一。
  • 它们都体现了 “把函数当变量” 的思想,使得“回调”“策略”“事件响应”等模式得以实现。

所以,函数指针和高阶函数虽然语言不同,但思想一致、目标相同——赋予函数灵活的表达力。

http://www.dtcms.com/wzjs/87851.html

相关文章:

  • 南宁外贸网络营销北京seo服务销售
  • 怎么做查询网站最近一周新闻热点回顾
  • 能免费做微信群推广的网站百度认证
  • 免费注册163免费邮箱seo建站平台哪家好
  • 做同步网站整合营销方案怎么写
  • 有没有做a的电影网站西安百度seo推广电话
  • dw自己做网站需要什么成人大专
  • 河池个人网站开发公司广告公司广告牌制作
  • 网络推广及网站建设合作协议网站流量查询服务平台
  • 网站做抢红包活动广告语免费网站在线观看人数在哪直播
  • 青岛知名网站建设百度手机版网页
  • 泉州市城乡和住房建设网站做网站排名优化的公司
  • 网页封装app信阳seo公司
  • 微模板网站建设聚合搜索引擎入口
  • 做网站租用服务器互动营销公司
  • 建设项目环保验收公示网站在线crm
  • 泉州网站建设报价百度指数官网移动版
  • 网站建设 海口长春百度关键词优化
  • app网站区别企业产品推广运营公司
  • 如何评价小米的网站建设关键词怎么优化到百度首页
  • 成品网站是什么意思网站服务器信息查询
  • 海北公司网站建设价格低邯郸seo
  • 除了昵图网还有什么做图网站六种常见的网络广告类型
  • 业网站制作引擎网站推广法
  • 视频网站哪个做的好处b站推广入口2023
  • 网站建设花多少钱为什么打开网址都是站长工具
  • 做网站的工作软文营销的案例
  • 奇迹建站模板产品推广渠道
  • 郫县哪里有做网站的网站案例分析
  • 静态网站建设seo入门书籍