在 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
可以正常工作并且可以轻松使用它..
如果我想定义一个指针变量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
可以正常工作并且可以轻松使用它..