C/C++中的函数指针初始化



当我浏览ESP IDF的文档时;我看到一个函数指针以某种方式初始化,这对我来说没有意义

typedef void *app_driver_handle_t;
app_driver_handle_t app_driver_light_init();
app_driver_handle_t app_driver_button_init();

等等。

我认为,为了初始化函数指针,必须按照以下方式进行:

app_driver_handle_t = app_driver_button_init();

很抱歉我的初级问题。

如果有人能解释这一点,那将是一个奇迹。

感谢

让我们分解一下您正在查看的代码。

typedef void *app_driver_handle_t;

这不是函数指针。这是一个void指针,这意味着它基本上可以指向任何值。这是一个类型,而不是一个值,所以app_driver_handle_t实际上根本不包含任何指针;它只是一个与CCD_ 3同义的名字。

app_driver_handle_t = app_driver_button_init();

给定上面的typedef,此语法从不有效。您正在将一个类型设置为可能是函数调用的类型。不能分配给类型。句点

可以声明变量,并将函数调用的结果分配给它们。

app_driver_handle_t my_variable;
my_variable = app_driver_button_init();

或者你可以在一行中完成。

app_driver_handle_t my_variable = app_driver_button_init();

最后,这最后两行。

app_driver_handle_t app_driver_light_init();
app_driver_handle_t app_driver_button_init();

这些也不是函数指针。这些是函数原型。它们是对编译器的承诺,说:;我最终将定义两个函数,称为app_driver_light_initapp_driver_button_init。这两个函数将不接受任何参数,并且将返回一个void*";。这里仍然没有函数指针。当函数最终被定义时,它们将返回一个void*,同样,它不是函数指针,而是指向void的指针。

这实际上与相同

void * app_driver_light_init();
void * app_driver_button_init();

这些不是函数指针,而是返回void*的函数。

typedef的函数指针如下所示:

typedef void* (*app_driver_light_init)();

最新更新