在 C 程序中定义指向函数的指针变量

define a pointer variable to the function in C program

如果我想定义一个指针变量p指向下面定义的函数foo()p的确切类型应该是什么?

int *foo(void *arg)
{
    ...
}

应该是

typedef int *(*funtion_foo_type)(void *);

您需要将指针作为指向函数的指针,返回一个 int *,接受一个 void* 参数。你可以把它改成

int * (*p) (void *);

然后,您可以使用

p = foo;

为了使函数声明更简单

int *foo(void *arg);

定义一个别名,例如 Tfoo,看起来与函数声明本身相同

typedef int *Tfoo(void *);

之后声明一个指向函数的函数指针就很容易了。随便写

Tfoo *foo_ptr = foo;

否则你可以写

typedef int * (* TFoo_ptr )(void *);

Tfoo_ptr foo_ptr = foo;

或者你可以不使用 typedef/

直接写一个函数指针的声明
int * (* foo_ptr )(void *) = foo;

牢记 Kyrylo Polezhaiev 的评论,p 的 type

int*(*)(void*)

要声明 p,您需要在类型的正确位置插入名称:

int*(*p)(void*);

但使用别名通常更具可读性:

typedef int*(func_t)(void*);
func_t* p;

你说的是指向函数的指针吗?

首先定义一个指向函数的指针,该函数接受 void argumenta 和 return int

typedef   int (*Ptrtofun)(void); 

现在可以安全地将其指向您的函数。

Ptrtofun p;
p = &foo(void);

现在你有一个 ptr p 可以正常工作并且可以轻松使用它..