|
===================================== 〔語彙分解〕的な部分一致の検索結果は以下の通りです。 ・ 関 : [せき, ぜき] (suf) honorific added to names of makuuchi and juryo division sumo wrestlers ・ 関数 : [かんすう] (n) function (e.g., math, programming, programing) ・ 数 : [すう, かず] 1. (n,n-suf) number 2. figure
関数へのポインタは、C, C++, Dやその他多くのプログラミング言語におけるポインタの一種である。関数へのポインタをデリファレンスすれば、そのポインタが指し示す関数(サブルーチン)を呼び出せる。応用例としては、switch文を置き換えるテーブルジャンプを実装する、などといったものがある。 関数オブジェクトは、関数へのポインタに似ているが、コード領域中のエントリポイントを指す単なるポインタである関数へのポインタと違い、データ領域上に実体を持つオブジェクトであるという点が異なっている(実装の詳細は言語や処理系により異なるが)。そのため、関数オブジェクトはデータを保持でき、クロージャを再現することもできる。ゆえに、関数オブジェクトは、「関数へのポインタ」ではなく「関数」という型と値を持つようなものと言え、より強力である。 Javaなどでは、関数へのポインタを使用できないが、そのような言語では、メソッドを1つだけ持つインタフェースで同様のことを行える。また、C#やVisual Basic .NETなどといった.NET Framework用の言語には、デリゲートがある。 第一級オブジェクトとして関数を使用できる(第一級関数がある)言語では、関数も引数で渡したり、戻り値で返したり、他の関数から動的に作成したりできるなどデータ同様に扱えるため、関数へのポインタは必要とされない。 ==Cでの例== この例では、関数へのポインタとして''new_function''が宣言され、そこへ関数''my_function''のアドレスを割り当てている。そして''new_function''を通じて関数を呼び出している。 註:''( *fp)(arg)''という構文は、関数へのポインタfpを通じて関数を呼び出す構文である。しかしCでは''fp(arg)''という構文も認められている〔。 〕 次の例では、関数へのポインタを引数として他の関数に渡している。ここでは、関数''function''が、先の例のように関数へのポインタを通じて呼び出される。関数''caller''は、引数として関数へのポインタと整数値を1つ取る。引数の整数値は、その関数へのポインタを通じて関数を呼び出すときに渡す引数として用いられる。そこで宣言されている関数へのポインタのプロトタイプに適合しさえすれば、''caller''の第一引数には、どんな関数でも渡すことが可能である。 3番目の例でも関数へのポインタを引数として他の関数に渡して用いている。関数''f''は、指定された区間で積分の近似を計算する関数''integ''へ渡されている。xの値を求めるために''f(x)''が''integ''から呼び出されている。''integ''では、double型の引数を1つ取り、double型の値を返しさえすれば、どんな関数でも計算させることが可能である。 関数へのポインタを定義する際には、typedefを用いるのが便利である。 抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)』 ■ウィキペディアで「関数へのポインタ」の詳細全文を読む 英語版ウィキペディアに対照対訳語「 Function pointer 」があります。 スポンサード リンク
|