0

次のステートメントの意味は何ですか。

((void*(*)(void*))keepfunc)(val)

注:-一般的に、私はそのような表現を理解するのに問題があります。誰か、これのためのいくつかの良い資料(ウェブまたは本)を私に提案してください。

4

2 に答える 2

1

式を裏返しに「解析」してみてください。

void*(*)(void*)

voidのポインタを期待し、voidのポインタを返す関数への関数ポインタ

(void*(*)(void*))keepfunc    

voidのポインタを期待し、voidのポインタを返す関数ポインタにキャストします

((void*(*)(void*))keepfunc)(val)

関数ポインタは呼び出す前に逆参照する必要があるため、これは間違っているはずです。次のようになります。

(*(void*(*)(void*))keepfunc)(val)

これはCプログラミングの教科書からの実用的な例でしたか?

于 2012-10-15T11:51:07.540 に答える
0

これは、void *パラメーターを受け入れてvoid*結果値を返す関数ポインターにkeepfuncをキャストし、パラメーターとしてvalを渡すことによって関数を評価するキャストです(ただし、keepfuncの前にアスタリスクがあるはずです。関数ポインタを呼び出す前に、それを尊重する必要があります)。私はあなたがグーグルで関数ポインタを調べるべきだと思います、それは物事をクリアするはずです。

于 2012-10-15T11:41:27.390 に答える