次のステートメントの意味は何ですか。
((void*(*)(void*))keepfunc)(val)
注:-一般的に、私はそのような表現を理解するのに問題があります。誰か、これのためのいくつかの良い資料(ウェブまたは本)を私に提案してください。
式を裏返しに「解析」してみてください。
void*(*)(void*)
voidのポインタを期待し、voidのポインタを返す関数への関数ポインタ
(void*(*)(void*))keepfunc
voidのポインタを期待し、voidのポインタを返す関数ポインタにキャストします
((void*(*)(void*))keepfunc)(val)
関数ポインタは呼び出す前に逆参照する必要があるため、これは間違っているはずです。次のようになります。
(*(void*(*)(void*))keepfunc)(val)
これはCプログラミングの教科書からの実用的な例でしたか?
これは、void *パラメーターを受け入れてvoid*結果値を返す関数ポインターにkeepfuncをキャストし、パラメーターとしてvalを渡すことによって関数を評価するキャストです(ただし、keepfuncの前にアスタリスクがあるはずです。関数ポインタを呼び出す前に、それを尊重する必要があります)。私はあなたがグーグルで関数ポインタを調べるべきだと思います、それは物事をクリアするはずです。