Q
函數指針作爲參數
24
A
回答
49
當然。
void f(void (*a)()) {
a();
}
void test() {
printf("hello world\n");
}
int main() {
f(&test);
return 0;
}
4
我建議在看世界著名的C faqs
20
讓說你有功能
int func(int a, float b);
所以指針將是
int (*func_pointer)(int, float);
所以比你可以使用它就像這樣
func_pointer = func;
(*func_pointer)(1, 1.0);
/*below also works*/
func_pointer(1, 1.0);
要避免每次你需要它的時候指定全指針式你coud typedef
它
typedef int (*FUNC_PTR)(int, float);
,比使用像任何其他類型的
void executor(FUNC_PTR func)
{
func(1, 1.0);
}
int silly_func(int a, float b)
{
//do some stuff
}
main()
{
FUNC_PTR ptr;
ptr = silly_func;
executor(ptr);
/* this should also wotk */
executor(silly_func)
}
我建議在看世界著名的C faqs 。
2
檢查qsort()
void qsort(void *base, size_t nmemb, size_t size,
int (*compar)(const void *, const void *));
的最後一個參數的函數是一個函數指針。當您在您的程序中調用qsort()
時,通過使用該指針,執行「進入庫」並「退回到您自己的代碼中」。
5
一個很好的例子:
#include <iostream>
using namespace std;
int sum(int a, int b)
{
return a + b;
}
int mul(int a, int b)
{
return a * b;
}
int div(int a, int b)
{
return a/b;
}
int mathOp(int (*OpType)(int, int), int a, int b)
{
return OpType(a, b);
}
int main()
{
cout << mathOp(sum, 10, 12) << ", " << mathOp(div, 10, 2) << endl;
return 0;
}
輸出是:'22,5'
相關問題
- 1. 指針數組作爲函數參數
- 2. 函數指針作爲參數在C
- 3. 字符指針作爲函數參數
- 4. 函數指針作爲模板參數?
- 5. 作爲函數參數的雙指針
- 6. 類函數指針作爲參數
- 7. 指針作爲函數參數
- 8. 指針作爲函數參數實例
- 9. C指針作爲函數的參數
- 10. 函數指針,結構作爲參數
- 11. 使用指針作爲函數參數
- 12. C++指針的函數作爲參數
- 13. 無效指針作爲函數參數
- 14. C++函數指針作爲參數
- 15. 傳遞函數指針作爲參數
- 16. 使用函數指針作爲參數
- 17. 傳遞函數指針作爲參數
- 18. 陣列函數指針作爲參數
- 19. 瞭解指針數組的指針作爲函數的參數
- 20. 函數指針地址作爲參考
- 21. 創建一個函數指針,它將一個函數指針作爲參數
- 22. 創建一個將函數指針作爲參數的函數指針
- 23. 混淆指向數組的指針作爲函數參數
- 24. 函數指針不帶指針參數
- 25. 指針作爲參數
- 26. 指針作爲僞參數
- 27. 空指針作爲參數
- 28. 將指針指向成員函數作爲函數指針
- 29. 函數和函數指針之間的區別作爲參數
- 30. 函數void * a和指針函數作爲參數
改變呼叫至f(試驗); –
兩者都有效。 &符是可選的。所以,當你調用函數指針時,解除引用指針。 –
沒錯,沒有必要改變任何東西。而且,即使參數聲明中的「指針」語法也是可選的。上面的'f'可以被聲明爲'void f(void a())'。 – AnT