2010-09-29 177 views
1

的讓我們假設我有這樣的片斷代碼:聲明函數指針

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)) 

原因在這兩種情況下我得到相同的結果提前 感謝

回答

0

這兩個版本都是一樣的,因爲你本質上是傳遞一個指向函數的指針。

儘管代碼是正確的,但通常最好使用函數指針的typedef,這樣可以提高代碼的可讀性並使代碼更加簡潔優雅。

事情是這樣的:

typedef void (*FooFunction)(int,int); 

void foo_for_foo (FooFunction fnc) 
{ 
    int x = 5; 
    fnc(x, x); 
} 
1

是,兩個版本指的是同一件事:函數和函數指針的相互轉換(雙向)。另見第4節標準C的奇怪行爲,這個名單:

http://www.eecs.berkeley.edu/~necula/cil/cil016.html#toc32

基本上,會發生什麼情況出現的指針被轉換成函數或函數的指針,多次以直觀的方式。