2012-12-19 32 views
2

正如標題所說,我如何在C中使用函數的指針?我可以只取該函數名稱的地址並將它傳遞給另一個函數;然後解除引用並調用它?如何在C中使用函數的指針? (No C++)

非常感謝。

+1

是........................ –

+0

這聽起來不錯,但現在看來似乎最好自己嘗試一下,然後在出現問題時向我們提出具體問題。 –

+0

我真的很驚訝,你找不到和搜索SO或谷歌使用函數指針... – Mike

回答

8

如果你知道函數地址,那麼是的。例如:

int add(int a, int b) 
{ 
    return a + b; 
} 

int sub(int a, int b) 
{ 
    return a - b; 
} 

int operation(int (*op)(int, int), int a, int b) 
{ 
    return op(a, b); 
} 

然後就這樣稱呼它:

printf("%d\n", operation(&add, 5, 3)); // 8 
printf("%d\n", operation(&sub, 5, 3)); // 2 

你甚至可以做一些陣列招數:

int op = 0; 
int (*my_pointer[2])(int, int) = 
{ 
    add, // op = 0 for add 
    sub // op = 1 for sub 
}; 
printf("%d\n", my_pointer[op](8, 2)); // 10 
+1

請注意,你實際上並不需要'&'時,通過函數;函數名稱本身也可以充當函數指針。 –

1

以及準確地回答你的問題,是有規定在C中稱爲「函數指針」。

但你必須遵循一定的規則,

1)所有的功能你想使用函數指針必須有相同的返回類型調用。 2)你想使用函數指針調用的所有函數必須有相同的參數和參數類型。

例如,

INT加(INT,INT); int sub(int,int);

爲上述兩個功能可以編寫函數指針作爲,

INT(*操作)(INT,INT);

並且您可以按照Flavio Torbio所述使用它。

希望它可以幫助.....