声明函数指针

问题描述:

的让我们假设我有这样的片断代码:声明函数指针

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

基本上,会发生什么情况出现的指针被转换成函数或函数的指针,多次以直观的方式。