我有p
喜欢:
typedef int (*p)();
假设我要声明指针的函数是int foo()
。
我想使用变量p声明一个新的指向函数foo的指针,以使用类似于:
typedef int emp[10];
emp p;// so now p is an array of size 10 of type int
答案 0 :(得分:1)
int foo()
{
// do something
}
typedef int (*p)();
int main( int argc, char** argv )
{
int result;
p funcPtr = foo;
result = funcPtr();
return 0;
}
答案 1 :(得分:1)
p
是:
typedef int (*p) ();
foo()是:
int foo(){
}
p
类型变量为f
:
p f = &foo;
如何使用指针调用:
(*f)();
示例代码:
#include<stdio.h>
int foo(){
printf("\n In FOO\n");
return 4;
}
typedef int(*p)();
int main(){
p f = &foo;
int i = (*f)();
printf("\n i = %d\n", i);
return 1;
}
你可以发现它正在运作on codepad.
注意你可以简单地分配p f = foo;
,并像f()
一样调用你可以在codepad找到的第二种形式
编辑:正如@Akash所评论的那样:
它编译并运行如下:
~$ gcc x.c -Wall
~$ ./a.out
In FOO
i = 4
Here is a project帮助解释函数指针的用处。
答案 2 :(得分:0)
使用typedef:
typdef int (*FunctionPtr)();
int foo()
{
return 4; // chosen by fair dice roll, should be random
}
FunctionPtr fptr = foo; // or &foo
没有typedef:
int (*fptr)() = foo; // or &foo
答案 3 :(得分:0)
从这篇文章:convert C function array to c++ functions pointer array?
#include <stdio.h>
void f1() {printf("helo\n");}
void f2() {printf("world\n");}
typedef struct func
{
void (*f)();
}func;
int main()
{
func a[] = {{f1}, {f2}};
a[0].f();
return 0;
}