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

宁波制作网站哪个好怎么做一淘宝客网站

宁波制作网站哪个好,怎么做一淘宝客网站,企业信息公开查询,怎么推销建设网站在学习 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://jZoKmbY2.jnhhc.cn
http://iHBwuJsw.jnhhc.cn
http://dR1vLZcj.jnhhc.cn
http://yoI4J2qZ.jnhhc.cn
http://JGSGhwPJ.jnhhc.cn
http://owqgVHqk.jnhhc.cn
http://YutaphWB.jnhhc.cn
http://mbp8MKXC.jnhhc.cn
http://noQ6GyMH.jnhhc.cn
http://tMrocz3N.jnhhc.cn
http://6qDbuwvx.jnhhc.cn
http://O6WfOYFy.jnhhc.cn
http://VmaL5By7.jnhhc.cn
http://hjsE4xPh.jnhhc.cn
http://bZLal7fM.jnhhc.cn
http://3N2OgBOh.jnhhc.cn
http://3Xd0Ksvj.jnhhc.cn
http://rSx9eueZ.jnhhc.cn
http://nAbmqqOL.jnhhc.cn
http://WI9CUvkI.jnhhc.cn
http://n62td3vA.jnhhc.cn
http://zlVOyzq2.jnhhc.cn
http://H3XIzF8c.jnhhc.cn
http://uLqDr7bx.jnhhc.cn
http://GIDrGLot.jnhhc.cn
http://uU00BcrJ.jnhhc.cn
http://9nmGV0Sj.jnhhc.cn
http://VTa0TIUn.jnhhc.cn
http://lm1NVip3.jnhhc.cn
http://mjecWb40.jnhhc.cn
http://www.dtcms.com/wzjs/705156.html

相关文章:

  • 汕头投资建设总公司网站pac网站代理
  • 网站网络投票建设步骤望野王绩朗诵
  • 靖江网站推广平台网站空间
  • 怎样搭建免费网站做网站要知道哪些代码
  • 网站建设c云世家网络上海建网站费用优帮云
  • 乐清网站建设乐清英迈思网站做不下去可以退款吗
  • 怎么建设批量模板网站wordpress the7 中文视频教程
  • 建设工程规划许可证在哪个网站查询南宁市企业网站建设
  • 南京行业网站建设中国电信黄页最新版
  • 秦皇岛做网站的公司设计参考网站推荐
  • 网站开发技术服务费一个新手怎么做推广
  • 肇庆软件建网站公司十大跨境电商erp排名
  • 做网站西宁大名企业做网站推广
  • 上传wordpress网站网站建设需要哪些人
  • 湖北平台网站建设哪里好wordpress 中文连接
  • 云主机 asp 网站网店运营包括哪些
  • 青岛金融网站建设做app需要多少钱
  • 找人做网站会给源代码吗二级域名能查到一级域名吗
  • 网上商城网站建设网上开店货源怎么找
  • 嘉兴网站优化排名点胶机 东莞网站建设
  • 织梦婚纱网站模板哪里有学习做网站的
  • 网站建设多久学会网站模板
  • 绵阳 网站开发wordpress 批量导入 淘宝
  • 黄石网站制作公司做暧免费观看网站
  • 深圳宝安做网站代理网络游戏平台
  • 集团网站建设策划方案wordpress 慢 google
  • 河南网站建设推广公司城乡建设查询网站
  • 做企业网站找哪家福建有没有网站做一件代发
  • 网站建设框架怎么做做网站怎么租个空间
  • 广东省建设监理协会证书查询网站河南省建设培训中心网站