我对如何在头文件中声明函数指针有点困惑。 我想在main和一个名为menus.c的文件中使用它,并在menus.h中声明它,我假设它。 我们想要初始化为指向某个函数。如何在头文件和c文件中声明函数指针?
它看起来像这样:
void (*current_menu)(int);
我们究竟写menus.c,menus.h和主?
我对如何在头文件中声明函数指针有点困惑。 我想在main和一个名为menus.c的文件中使用它,并在menus.h中声明它,我假设它。 我们想要初始化为指向某个函数。如何在头文件和c文件中声明函数指针?
它看起来像这样:
void (*current_menu)(int);
我们究竟写menus.c,menus.h和主?
指针函数本身没有函数定义。它只不过是一个指向类型的指针,类型由函数的返回类型和参数列表指定。你需要做的是定义一个具有相同参数列表和返回类型的函数,然后使用指针函数来保存该函数的地址。然后可以通过指针调用该函数。
函数指针仍然是一个指针,意味着它仍然是一个变量。
如果你想让一个变量在多个源文件中可见,最简单的解决方案是在头文件中声明它为extern
,并在其他地方定义。
在标题:
extern void (*current_menu)(int);
在一个源文件:
void (*current_menu)(int) = &the_func_i_want;
这往往有助于使用typedef
函数指针,这样你就可以命名类型的东西描述:
typedef void (*MenuFunction)(int);
然后,你将有这种类型的全局变量,可能在menus.c,并宣布(与extern
)在menus.h:
static void my_first_menu_function(int x)
{
printf("the menu function got %d\n", x);
}
MenuFunction current_menu = my_first_menu_function;
从main.c中,你可以再做:
#include "menu.h"
current_menu(4711);
调用current_menu
当前指向的任何函数。
非常真实! '函数
ty,现在有效 – user1106072
&符号不是绝对必要的 – Dave
这是真的,@Dave。在C中,为了清晰起见,这是我的一种风格选择。在C++中,有时需要在某些模板上下文中使用,所以我只是为了一致性而做。 –