2016-09-21 16 views
0

私が使っているプロジェクトでは、共有ライブラリからロードされた関数へのポインタのマップを作成する複雑なマクロが見つかりました。同じ方法で読み込まなければならない別のライブラリのためにそれを使用するには、私はそれを調べなければなりませんでした。そして、私の知る限りでは動作してはならない行が含まれていることがわかりました。シンプルなコードにダウンし、それを沸騰させるために、私は離れて、すべてのシンタックスシュガーを投げ、そのような例を作った:ポインタで関数を呼び出す方法は2つあります。

#include <iostream> 

using namespace std; 

void func(int i, float f) 
{ 
    cout << "Parameter is " << i << " and " << f << endl; 
} 


typedef void (*FunctionFunc)(int i, float f); 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    FunctionFunc p = &func; 
    (p)(5,4.3f); 
    return 0; 
} 

は(* P)(5,4.3f)のような関数呼び出し見てはいけない - 図書に従ってKので、 & R's?コンパイラはVS2010で、上記のコードはアスタリスクとアスタリスクの両方で動作します。

+1

[this](http://stackoverflow.com/questions/12152167/why-is-using-the-function-name-as-a-function-pointer-equivalent-to -applying-the) – user3286661

+0

@ user3286661:それは逆の変換です。 – MSalters

+0

@MSaltersその質問に対する受け入れられた答えは、この質問に対する非常に良い答えです。 –

答えて

1

いいえ、逆参照は必要ありません。関数へのポインタは、関数と同様に呼び出し可能です。たとえp(5, 4.3f)であっても許容されていました。

関連する問題