如果我想定义指针变量p
以指向下面定义的函数foo()
,那么p
的确切类型应该是什么?
int *foo(void *arg)
{
...
}
答案 0 :(得分:4)
应该是
typedef int *(*funtion_foo_type)(void *);
答案 1 :(得分:4)
您需要将指针作为指向函数的指针,返回int *
,接受void*
参数。你可以像
int * (*p) (void *);
然后,您可以使用
p = foo;
答案 2 :(得分:3)
考虑到Kyrylo Polezhaiev的评论,p的类型是
int*(*)(void*)
要声明p
,您需要在类型中的正确位置插入名称:
int*(*p)(void*);
但使用别名通常更具可读性:
typedef int*(func_t)(void*);
func_t* p;
答案 3 :(得分:1)
为了使函数声明更容易
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;
答案 4 :(得分:1)
你在谈论功能指针吗?
首先定义一个指向函数的指针,该函数接受void
argumenta并返回int
typedef int (*Ptrtofun)(void);
现在可以安全地将此指向您的功能。
Ptrtofun p;
p = &foo(void);
现在你有一个ptr p
可以正常使用它。