関数ポインタ
これは、文字通りに基づいて理解されるであろう:関数ポインタの値を返します。
差の他の関数は、関数ポインタの戻り型がポインタであることであると彼は、基本的機能です。
例えば:
INTのFuc(ボイド) { 戻り 5 。 }
Fucはこの関数はint型の値を返し、5の値を返します。
ポインタ機能のどのようなので?
int型 *のFuc(無効) { リターン 5 。 }
この関数は、上記の機能が異なっていると、彼は値が、ポインタが返されるint型の*のある返さのFucであり、その数5プラスチックINTアドレスにポイント。
ポインター機能を使用する場合に注意を払うには、送信ポインタは、ローカル変数に対処するために指していません
例えば:
INT *のFuc(ボイド) { int型 = 5 。 返します。 }
この例では、間違っている(それは関数ポインタでない場合は、もちろん、この使い方は問題ではありません)
この実施形態では、int型のアドレスの戻り値が、私たちは、この図5を得ることができないように、ローカル変数の終わりにはFucで、回収されたときに、ローカル変数です。
関数ポインタ
関数へのポインタ:文字通りの意味は、関数ポインタであることを理解すべきです。
彼は基本的にポインタである、我々は通常、ポインタを使用します
例えば:
int型、A = 5 ; int型 * P; P = A;
番号5に寄託されたアドレスの整数AとPポインタポイント。
関数に続いて関数ポインタ
int型(* P)(int型);
これは、関数ポインタPの名前、パラメータINT INTを戻したポインティング機能である、またはそうINTを指し式は、関数型ポインタp()(INT)は
、と言うことですつまり、ポインタ名と同じである私の理解、関数ポインタと基本的な使用方法の他のポインタによると、あなたは関数名が表示されますを置き換えることができます
INTのFuc(ボイド) { int型 = 5 。 返します。 } int型のmain(int型のargc、char型 のconst * ARGV []) { int型(* P)(ボイド)。 P = のFuc; printf(" %dの\ n " 、のFuc())。 printf(" %dの\ n " 、P())。 printf(" %dの\ N "、(* P)())。 リターン 0 ; }
コンパイラの出力があるので(* P)とそれほどのFuc()およびp()が同等であり、p()この関数をFUCする関数ポインタP点()は、同じです。
5 5 5
私が使用している場合ことをここに注意
printf(" %d個\ N "、* P());
これは間違った使い方です。
その本質はポインタであるので、我々は別の関数にパラメータとして渡されたポインタを置くことができます
INTプラス(int型のx、int型のY) { リターン X + Y。 } INT建(int型のx、int型のY) { リターン X - Y。 } INT jisuan(INT(* P)(INT、INT)、int型のx、int型のY) { リターン(* P)(X、Y) } int型のmain(int型のargc、char型 のconst * ARGV []) { のprintf(" %dの\ nは"Jisuan(建、1、2 )); のprintf(" %D \ N- "、jisuan(PLUS、1、2 )); 戻り 0 ; }
この例では、他の同様の機能を呼び出すために柔軟な機能を使用する目的を達成するために、引数その他の機能として、(* p)を(int型、int)をint型になります。