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

时间:2016-01-21 19:58:40

标签: c pointers function-pointers

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

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

5 个答案:

答案 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可以正常使用它。