C++ の関数ポインター
前提条件:
ポインタはアドレスの記号表現です。これらにより、プログラムは参照による呼び出しをシミュレートしたり、動的なデータ構造を作成および操作したりすることができます。配列またはその他のデータ構造内の要素を反復処理することは、ポインターの主な用途の 1 つです。
操作している変数のアドレスは、同じデータ型 (int や string など) を指すポインタ変数に割り当てられます。
構文 :
datatype *var_name;
関数のアドレス: すべての関数のコードはメモリ内に存在するため、すべての関数にはプログラム内の他のすべての変数と同様にアドレスがあることは誰もが知っています。関数の名前を使用して、関数のアドレスを見つけることができます。関数内に括弧を付けずに関数名を記述するだけで、関数のアドレスを取得できます。
これについて詳しくは、記事「関数のアドレス」を参照してください。
C++ の関数ポインター
- 関数ポインタは関数を指すために使用され、同様にポインタは変数を指すために使用されます。
- 関数のアドレスを保存するために使用されます。
- 関数ポインタは、関数を呼び出すために使用されるか、または別の関数に引数として送信できます。
C++ の関数ポインター
構文 :
return_type (*FuncPtr) (parameter type, ....);
C++ での関数ポインターの参照と逆参照
変数で使用されるポインターと同様に、関数ポインターを使用して参照と参照解除を実行します。
参照: ポインタに関連付けられる関数のアドレスが割り当てられるとき、このプロセスは参照と呼ばれます。
逆参照: (*) 演算子を使用してポインターに格納されている値を取得する場合。
構文:
// Declaring return_type (*FuncPtr) (parameter type, ....); // Referencing FuncPtr= function_name; // Dereferencing data_type x=*FuncPtr;
関数の呼び出しに使用される関数ポインタ
この例では、関数へのポインタを指定し、そのポインタを使用して関数を呼び出す方法を示しています。効率的な使い方です
例:
C++
// C++ program to implementation> // Function Pointer> #include> using> namespace> std;> int> multiply(> int> a,> int> b) {> return> a * b; }> int> main()> {> > int> (*func)(> int> ,> int> );> > // func is pointing to the multiplyTwoValues function> > func = multiply;> > int> prod = func(15, 2);> > cout < <> 'The value of the product is: '> < < prod < < endl;> > return> 0;> }> |
出力
The value of the product is: 30
上記のプログラムでは、2 つの要素 a と b を乗算して結果を返す関数 multiply を宣言しています。ただし、関数を直接呼び出すのではなく、同じ作業を行う関数ポインター prod を使用しています。
関数ポインタをパラメータとして渡す
関数のメモリアドレスを格納する関数ポインタを宣言するが、戻り値を次の関数に渡したい場合。このタスクを実行するには 2 つの方法があります。まず、取得した値を渡すか、次に既存の関数ポインターを渡します。
例:
C++
// C++ Program for demonstrating> // function pointer as pointer> #include> using> namespace> std;> const> int> a = 15;> const> int> b = 2;> // Function for Multiplication> int> multiply() {> return> a * b; }> // Function containing function pointer> // as parameter> void> print(> int> (*funcptr)())> {> > cout < <> 'The value of the product is: '> < < funcptr()> > < < endl;> }> // Driver Function> int> main()> {> > print(multiply);> > return> 0;> }> |
出力
The value of the product is: 30
時間計算量: ○(1)。
補助スペース: ○(1)。
上記のプログラムでは、2 つの変数 a と b を乗算する乗算関数を宣言しています。関数ポインタを print 関数のパラメータとして渡します。ここでは、関数ポインタを使用して乗算関数から値を計算し、その値を print 関数で計算します。