You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于ESP IDF中函数指针初始化方式的疑问

问题解析

先把你的几个误解拆解清楚:

  1. 先搞懂那个typedef的真实意思
    typedef void *app_driver_handle_t; 不是定义函数指针类型,只是把void*(无类型指针)起了个新名字app_driver_handle_t。这个类型本质就是个通用指针,用来当驱动的句柄——简单说就是驱动初始化后,返回一个指向内部状态结构体的指针,后续操作这个驱动都要靠这个句柄来识别。

  2. 那两行是普通函数声明,不是函数指针

app_driver_handle_t app_driver_light_init();
app_driver_handle_t app_driver_button_init();

这俩是函数声明,告诉编译器:有这么两个函数,调用它们会返回一个app_driver_handle_t类型的值(也就是刚才说的驱动句柄)。比如调用app_driver_button_init(),就是初始化按键驱动,然后拿到这个驱动的句柄。

  1. 你写的代码是错的
    你写的app_driver_handle_t = app_driver_button_init();不对,因为app_driver_handle_t是类型名,不是变量。正确的用法是先声明一个该类型的变量,再把函数返回值赋值给它:
// 声明一个句柄变量,然后把初始化函数的返回值赋给它
app_driver_handle_t button_handle = app_driver_button_init();
  1. 真·函数指针的写法是什么样的?
    如果是定义函数指针类型,写法会是这样的:
// 定义一个指向"无参数、无返回值"函数的指针类型
typedef void (*app_driver_callback_t)(void);

对比一下就能看出和你看到的代码区别了。

内容的提问来源于stack exchange,提问作者Rafay Shams

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 23:31:19