C の関数ポインタは、関数のメモリ アドレスを指す変数を指します。これは、コールバック関数、動的バインディング、イベント処理などのシナリオでよく使用されます。たとえば、並べ替えアルゴリズムでは、関数ポインターを使用してさまざまな比較関数を実装し、並べ替えアルゴリズムを柔軟に選択できます。
C 関数ポインターの応用シナリオ
関数ポインターとは何ですか?
C では、関数ポインターは関数へのポインターです。これは関数のメモリアドレスを指す変数です。
関数ポインタの宣言
関数ポインタの宣言は、通常の関数の宣言とよく似ていますが、先頭にアスタリスク (*) が追加される点が異なります。関数名:
typedef int (*FuncPtr)(int, int);
上記の宣言は、FuncPtr
という名前の関数ポインターを定義します。この関数は、int
型の 2 つのパラメーターを受け取り、 を返す関数を指します。 int
型 関数。
関数ポインターの使用法
関数ポインターは次のシナリオで使用できます:
実際のケース: 並べ替えアルゴリズム
関数ポインターを使用して、さまざまな並べ替えアルゴリズムを実装できます。以下は、関数ポインターを使用した比較関数を使用する sort
関数です。
#include <algorithm> bool Ascending(int a, int b) { return a < b; } bool Descending(int a, int b) { return a > b; } void Sort(int* arr, int size, bool (*CompareFunc)(int, int)) { std::sort(arr, arr + size, CompareFunc); } int main() { int arr[] = {5, 3, 1, 2, 4}; int size = sizeof(arr) / sizeof(arr[0]); // 使用升序比较函数进行排序 Sort(arr, size, Ascending); // 使用降序比较函数进行排序 Sort(arr, size, Descending); return 0; }
上記のコードでは、CompareFunc
は 2 つの # を受け入れる関数への関数ポインターです。 ##int 型パラメータを使用し、
bool 型比較関数を返します。 2 つの比較関数
Ascending と
Descending を定義し、2 つの数値を昇順と降順で比較します。
Sort 関数は、渡された比較関数を使用して配列
arr を並べ替えます。関数ポインターを使用すると、さまざまな比較関数を柔軟に選択して、さまざまな並べ替えアルゴリズムを実装できます。
以上がC++ 関数ポインターの適用シナリオの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。