1. 指针函数与函数指针的区别
在C/C++语言中,"指针函数"和"函數指針"是兩個容易混淆的概念。它們雖然名稱相似,但意義完全不同。指針函數是返回指針的函數,而函數指針是指向函數的指針變量。
1.1 指針函數(pointer function)
指針函數是返回指針的函數。其定義格式為:
int* func(int x, int y);這裡func是返回int*類型的函數。
1.2 函數指針(function pointer)
函數指針是保存函數地址的指針變量。其定義格式為:
int (*ptr)(int, int);這裡ptr是指向返回int類型函數的指針變量。
2. 指針函數與函數指針的區別
| 比較項目 | 指針函數 | 函數指針 |
|---|---|---|
| 定義方式 | int* func() | int (*ptr)() |
| 本質 | 返回指針的函數 | 指向函數的指針變量 |
| 用途 | 返回指針 | 保存函數地址 |
| 返回值 | 指針 | 無 |
| 變量類型 | 函數 | 指針變量 |
3. 函數指針的使用方法
3.1 函數指針的聲明
int (*ptr)(int, int);3.2 函數指針的初始化
ptr = &func;3.3 函數指針的調用
(*ptr)(1,2);4. 函數指數的應用場景
- 回調函數
- 函數表
- 動態庫函數地址保存
- 函數指數數組
5. 函數指針的注意事項
- 函數指針類型必須與指向函數類型匹配
- 函數指針不能進行算術運算
- 函數指針不能進行比較運算
- 函數指針不能進行賦值運算
- 函數指針不能進行取值運算
6. 函數指針的優點
- 靈活性高
- 可移植性強
- 執行效率高
- 代碼量少
- 可維護性強
7. 函數指針的缺點
- 可讀性差
- 調試困難
- 容易出錯
- 維護成本高
- 開發效率低
8. 函數指針的應用實例
8.1 回調函數
void callback(int (*ptr)(int, int)) { (*ptr)(1,2); }8.2 函數表
int (*ptr[10])(int, int);8.3 動態庫函數地址保存
void (*ptr)(void); ptr = (void (*)(void))dlsym(handle, "func");8.4 函數指針數組
int (*ptr[10])(int, int);9. 函數指針的注意事項
- 函數指針類型必須與指向函數類型匹配
- 函數指針不能進行算術運算
- 函數指針不能進行比較運算
- 函數指針不能進行賦值運算
- 函數指針不能進行取值運算
10. 函數指針的優點
- 靈活性高
- 可移植性強
- 執行效率高
- 代碼量少
- 可維護性強
11. 函數指針的缺點
- 可讀性差
- 調試困難
- 容易出錯
- 維護成本高
- 開發效率低
12. 函數指針的應用實例
12.1 回調函數
void callback(int (*ptr)(int, int)) { (*ptr)(1,2); }12.2 函數表
int (*ptr[10])(int, int);12.3 動態庫函數地址保存
void (*ptr)(void); ptr = (void (*)(void))dlsym(handle, "func");12.4 函數指針數組
int (*ptr[10])(int, int);13. 函數指針的注意事項
- 函數指針類型必須與指向函數類型匹配
- 函數指針不能進行算術運算
- 函數指針不能進行比較運算
- 函數指針不能進行賦值運算
- 函數指針不能進行取值運算
14. 函數指針的優點
- 靈活性高
- 可移植性強
- 執行效率高
- 代碼量少
- 可維護性強
15. 函數指針的缺點
- 可讀性差
- 調試困難
- 容易出錯
- 維護成本高
- 開發效率低
16. 函數指針的應用實例
16.1 回調函數
void callback(int (*ptr)(int, int)) { (*ptr)(1,2); }16.2 函數表
int (*ptr[10])(int, int);16.3 動態庫函數地址保存
void (*ptr)(void); ptr = (void (*)(void))dlsym(handle, "func");16.4 函數指針數組
int (*ptr[10])(int, int);17. 函數指針的注意事項
- 函數指針類型必須與指向函數類型匹配
- 函數指針不能進行算術運算
- 函數指針不能進行比較運算
- 函數指針不能進行賦值運算
- 函數指針不能進行取值運算
18. 函數指針的優點
- 靈活性高
- 可移植性強
- 執行效率高
- 代碼量少
- 可維護性強
19. 函數指針的缺點
- 可讀性差
- 調試困難
- 容易出錯
- 維護成本高
- 開發效率低
20. 函數指針的應用實例
20.1 回調函數
void callback(int (*ptr)(int, int)) { (*ptr)(1,2); }20.2 函數表
int (*ptr[10])(int, int);20.3 動態庫函數地址保存
void (*ptr)(void); ptr = (void (*)(void))dlsym(handle, "func");20.4 函數指針數組
int (*ptr[10])(int, int);21. 函數指針的注意事項
- 函數指針類型必須與指向函數類型匹配
- 函數指針不能進行算術運算
- 函數指針不能進行比較運算
- 函數指針不能進行賦值運算
- 函數指針不能進行取值運算
22. 函數指針的優點
- 靈活性高
- 可移植性強
- 執行效率高
- 代碼量少
- 可維護性強
23. 函數指針的缺點
- 可讀性差
- 調試困難
- 容易出錯
- 維護成本高
- 開發效率低
24. 函數指針的應用實例
24.1 回調函數
void callback(int (*ptr)(int, int)) { (*ptr)(1,2); }24.2 函數表
int (*ptr[10])(int, int);24.3 動態庫函數地址保存
void (*ptr)(void); ptr = (void (*)(void))dlsym(handle, "func");24.4 函數指針數組
int (*ptr[10])(int, int);25. 函數指針的注意事項
- 函數指針類型必須與指向函數類型匹配
- 函數指針不能進行算術運算
- 函數指針不能進行比較運算
- 函數指針不能進行賦值運算
- 函數指針不能進行取值運算
26. 函數指針的優點
- 靈活性高
- 可移植性強
- 執行效率高
- 代碼量少
- 可維護性強
27. 函數指針的缺點
- 可讀性差
- 調試困難
- 容易出錯
- 維護成本高
- 開發效率低
28. 函數指針的應用實例
28.1 回調函數
void callback(int (*ptr)(int, int)) { (*ptr)(1,2); }28.2 函數表
int (*ptr[10])(int, int);28.3 動態庫函數地址保存
void (*ptr)(void); ptr = (void (*)(void))dlsym(handle, "func");28.4 函數指針數組
int (*ptr[10])(int, int);29. 函數指針的注意事項
- 函數指針類型必須與指向函數類型匹配
- 函數指針不能進行算術運算
- 函數指針不能進行比較運算
- 函數指針不能進行賦值運算5. 函數指針不能進行取值運算
30. 函數指針的優點
- 靈活性高
- 可移植性強
- 執行效率高
- 代碼量少
- 可維護性強
31. 函數指針的缺點
- 可讀性差
- 調試困難
- 容易出錯
- 維護成本高
- 開發效率低
32. 函數指針的應用實例
32.1 回調函數
void callback(int (*ptr)(int, int)) { (*ptr)(1,2); }32.2 函數表
int (*ptr[10])(int, int);32.3 動態庫函數地址保存
void (*ptr)(void); ptr = (void (*)(void))dlsym(handle, "func";32.4 函數指針數組
int (*ptr[10])(int, int);33. 函數指針的注意事項
- 函數指針類型必須與指向函數類型匹配
- 函數指針不能進行算術運算
- 函數指針不能進行比較運算
- 函數指針不能進行賦值運算
- 函數指針不能進行取值運算
34. 函數指針的優點
- 靈活性高
- 可移植性強
- 執行效率高
- 代碼量少
- 可維護性強
35. 函數指針的缺點
- 可讀性差
- 調試困難
- 容易出錯
- 維護成本高
- 開發效率低
36. 函數指針的應用實例
36.1 回調函數
void callback(int (*ptr)(int, int)) { (*ptr)(1,2); }36.2 函數表
int (*ptr[10])(int, int);36.3 動態庫函數地址保存
void (*ptr)(void); ptr = (void (*)(void))dlsym(handle, "func";36.4 函數指針數組
int (*ptr[10])(int, int);37. 函數指針的注意事項
- 函數指針類型必須與指向函數類型匹配
- 函數指針不能進行算術運算
- 函數指針不能進行比較運算
- 函數指針不能進行賦值運算
- 函數指針不能進行取值運算
38. 函數指針的優點
- 靈活性高
- 可移植性強
- 執行效率高
- 代碼量少
- 可維護性強
39. 函數指針的缺點
- 可讀性差
- 調試困難
- 容易出錯
- 維護成本高
- 開發效率低
40. 函數指針的應用實例
40.1 回調函數
void callback(int (*ptr)(int, int)) { (*ptr)(1,2); }40.2 函數表
int (*ptr[10])(int, int);40.3 動態庫函數地址保存
void (*ptr)(void); ptr = (void (*)(void))dlsym(handle, "func";40.4 函數指針數組
int (*ptr[10])(int, int);41. 函數指針的注意事項
- 函數指針類型必須與指向函數類型匹配
- 函數指針不能進行算術運算
- 函數指針不能進行比較運算
- 函數指針不能進行賦值運算
- 函數指針不能進行取值運算
42. 函數指針的優點
- 靈活性高
- 可移植性強
- 執行效率高
- 代碼量少
- 可維護性強
43. 函數指針的缺點
- 可讀性差
- 調試困難
- 容易出錯
- 維護成本高
- 開發效率低
44. 函數指針的應用實例
44.1 回調函數
void callback(int (*ptr)(int, int)) { (*ptr)(1,2); }44.2 函數表
int (*ptr[10])(int, int);44.3 動態庫函數地址保存
void (*ptr)(void); ptr = (void (*)(void))dlsym(handle, "func";44.4 函數指針數組
int (*ptr[10])(int, int);45. 函數指針的注意事項
- 函數指針類型必須與指向函數類型匹配
- 函數指針不能進行算術運算
- 函數指針不能進行比較運算
- 函數指針不能進行賦值運算
- 函數指針不能進行取值運算
46. 函數指針的優點
- 靈活性高
- 可移植性強
- 執行效率高
- 代碼量少
- 可維護性強
47. 函數指針的缺點
- 可讀性差
- 調試困難
- 容易出錯
- 維護成本高
- 開發效率低
48. 函數指針的應用實例
48.1 回調函數
void callback(int (*ptr)(int, int)) { (*ptr)(1,2); }48.2 函數表
int (*ptr[10])(int, int);48.3 動態庫函數地址保存
void (*ptr)(void); ptr = (void (*)(void))dlsym(handle, "func";48.4 函數指針數組
int (*ptr[10])(int, int);49. 函數指針的注意事項
- 函數指針類型必須與指向函數類型匹配
- 函數指針不能進行算術運算
- 函數指針不能進行比較運算
- 函數指針不能進行賦值運算
- 函數指針不能進行取值運算
50. 函數指針的優點
- 靈活性高
- 可移植性強
- 執行效率高
- 代碼量少
- 可維護性強
51. 函數指針的缺點
- 可讀性差
- 調試困難
- 容易出錯
- 維護成本高
- 開發效率低
52. 函數指針的應用實例
52.1 回調函數
void callback(int (*ptr)(int, int)) { (*ptr)(1,2); }52.2 函數表
int (*ptr[10])(int, int);52.3 動態庫函數地址保存
void (*ptr)(void); ptr = (void (*)(void))dlsym(handle, "func";52.4 函數指針數組
int (*ptr[10])(int, int);53. 函數指針的注意事項
- 函數指針類型必須與指向函數類型匹配
- 函數指針不能進行算術運算
- 函數指針不能進行比較運算
- 函數指針不能進行賦值運算
- 函數指針不能進行取值運算
54. 函數指針的優點
- 靈活性高
- 可移植性強
- 執行效率高
- 代碼量少
- 可維護性強
55. 函數指針的缺點
- 可讀性差
- 調試困難
- 容易出錯
- 維護成本高
- 開發效率低
56. 函數指針的應用實例
56.1 回調函數
void callback(int (*ptr)(int, int)) { (*ptr)(1,2); }56.2 函數表
int (*ptr[10])(int, int);56.3 動態庫函數地址保存
void (*ptr)(void); ptr = (void (*)(void))dlsym(handle, "func";56.4 函數指針數組
int (*ptr[10])(int, int);57. 函數指針的注意事項
- 函數指針類型必須與指向函數類型匹配
- 函數指針不能進行算術運算
- 函數指針不能進行比較運算
- 函數指針不能進行賦值運算
- 函數指針不能進行取值運算
58. 函數指針的優點
- 靈活性高
- 可移植性強
- 執行效率高
- 代碼量少
- 可維護性強
59. 函數指針的缺點
- 可讀性差
- 調試困難
- 容易出錯
- 維護成本高
- 開發效率低
60. 函數指針的應用實例
60.1 回調函數
void callback(int (*ptr)(int, int)) { (*ptr)(1,2); }60.2 函數表
int (*ptr[10])(int, int);60.3 動態庫函數地址保存
void (*ptr)(void); ptr = (void (*)(void))dlsym(handle, "func";60.4 函數指針數組
int (*ptr[10])(int, int);