これが事です、私はいくつかの機能を持っています、
void foo() {}
void bar() {}
そして、これらの関数を通常のオブジェクトのポインターと同じように渡したいのですが、
int main()
{
void (*fptr1)() = foo;
void (*fptr2)() = fptr1;
void (*fptr3)() = bar;
if (fptr1 == foo)
printf("foo function\n");
if (fptr2 == foo)
printf("foo function\n");
if (fptr3 == foo)
printf("foo function\n")
}
これらの関数ポインタをこのように使用できますか? そして、それをテストするプログラムを書きましたが、大丈夫のようです。stack
さらに、やに存在する可能性のある通常のオブジェクトとは異なりheap
、関数は に存在すると思いますtext segment
(そうですか?) ので、 を参照すると、テキスト セグメント内のfoo
関数が存在する物理アドレスがわかりますか?foo
ファローアップ
実際に DLL を使用している場合は、これを考慮してください。まず、関数 ptr に関数fptr
が割り当てられます。
ReturnType (*fptr)(ArgType) = beautiful_func;
ここで 2 つのシナリオ、
1) beautiful_func が DLL に含まれていない場合は、これを使用しても安全fptr
です。
2)それがDLLにある場合、後で、使用するのは安全ではないと思います。なぜなら、今では生まれてfptr
いないまったく別の関数を参照している可能性があるからですよね?fptr