目錄
- 基本語法
- 示例
- 常見用途
- 注意事項
函式指標是指向函式的指標,它儲存了函式的地址,可以透過它呼叫指向的函式。函式指標在C++中具有多種用途,例如回撥函式、動態函式呼叫以及實現多型等。
基本語法
函式指標的宣告語法如下:
返回型別 (*指標名)(引數列表);
示例
- 宣告和定義一個函式指標:
// 一個返回int,接受兩個int引數的函式
int add(int a, int b) {
return a + b;
}
// 宣告一個函式指標
int (*funcPtr)(int, int);
// 將函式指標指向函式add
funcPtr = add;
// 使用函式指標呼叫函式
int result = funcPtr(2, 3); // result == 5
- 使用typedef簡化函式指標宣告:
// 使用typedef定義函式指標型別
typedef int (*FuncPtrType)(int, int);
// 使用typedef定義函式指標變數
FuncPtrType funcPtr = add;
// 使用函式指標呼叫函式
int result = funcPtr(2, 3); // result == 5
常見用途
- 回撥函式:
回撥函式是指透過函式指標作為引數傳遞的函式,通常用於實現事件驅動的程式設計。
#include <iostream>
// 定義一個回撥函式型別
typedef void (*CallbackFunc)(int);
// 一個執行操作並呼叫回撥函式的函式
void performOperation(CallbackFunc callback, int value) {
// 執行一些操作
int result = value * 2;
// 呼叫回撥函式
callback(result);
}
// 回撥函式的實現
void myCallback(int result) {
std::cout << "Callback called with result: " << result << std::endl;
}
int main() {
// 使用回撥函式
performOperation(myCallback, 5);
return 0;
}
- 動態函式呼叫:
函式指標可以用於在執行時選擇和呼叫不同的函式,這在某些需要動態行為的場景下非常有用。
#include <iostream>
int add(int a, int b) {
return a + b;
}
int subtract(int a, int b) {
return a - b;
}
int main() {
int (*operation)(int, int);
char op;
std::cout << "Enter operation (+ or -): ";
std::cin >> op;
if (op == '+') {
operation = add;
} else if (op == '-') {
operation = subtract;
}
int result = operation(10, 5);
std::cout << "Result: " << result << std::endl;
return 0;
}
注意事項
- 函式指標型別要匹配:
函式指標的型別必須與指向的函式型別完全匹配,包括返回型別和引數列表。 - 指標初始化:
在使用函式指標之前,應確保它已正確初始化,指向有效的函式地址,否則可能會導致未定義行為。
函式指標是C++中強大且靈活的特性,透過它可以實現許多高階程式設計技巧,提升程式碼的可複用性和靈活性。