声明函数指针
问题描述:
的让我们假设我有这样的片断代码:声明函数指针
void foo_for_foo(void some_function(int, int)) <------
{
int x = 5;
some_function(x, x);
}
而且这一次(实际上与小的差别一样)
void foo_for_foo(void (*some_function)(int, int)) <-------
{
int x = 5;
some_function(x, x);
}
我的问题是,不要紧,我怎么写呢
void foo_for_foo(void some_function(int, int))
或
void foo_for_foo(void (*some_function)(int, int))
原因在这两种情况下我得到相同的结果提前 感谢
答
这两个版本都是一样的,因为你本质上是传递一个指向函数的指针。
尽管代码是正确的,但通常最好使用函数指针的typedef,这样可以提高代码的可读性并使代码更加简洁优雅。
事情是这样的:
typedef void (*FooFunction)(int,int);
void foo_for_foo (FooFunction fnc)
{
int x = 5;
fnc(x, x);
}
答
是,两个版本指的是同一件事:函数和函数指针的相互转换(双向)。另见第4节标准C的奇怪行为,这个名单:
http://www.eecs.berkeley.edu/~necula/cil/cil016.html#toc32
基本上,会发生什么情况出现的指针被转换成函数或函数的指针,多次以直观的方式。