私はこれが重複していることを知っています。私はすでに検索しましたが、私が抱えている問題は何も解決していません。 私の混乱を取り除くために、私は元のタイプキャストを単純化しようとしました。うまくいけば、それは私が混乱し場所です関数ポインタ関数ポインタの型キャスト
FuncPtr = (int (*)(void*, void*))strcmp
を型キャストのstrcmp宣言
Int (*funcPtr)(void*,void*);
関数へのポインタを宣言
int strcmp (char *, char *);
未定義の動作ではありません。私はTypecasting私たちが作成した関数のポインタを理解しています。したがって、タイプキャストFuncPtrは、たとえば、機能のタイプを変更するだけです。funcPtrが指すことができます。私はまた、関数の名前は、自身への関数ポインタがそう
int (*)(void*, void*))strcmp
のstrcmpが今無効にするために2つのポインタを取る関数を指すことができ、のstrcmpを型キャストし、上から私の理解を使用していることを読んだことがあります私は関数名が別の関数へのポインタになることはできないと思います。私はあなたがdoesnのためにどのような関数ポインタのstrcmpポイントを変更すると、次の型キャスト
FuncPtr = (int (*)(void*, void*))strcmp
でFuncPtrにstrcmpののアドレスを割り当てることができますどのように見ることができない上にあるので私の理解の
引数を変更して戻り値の型をstrcmpに変更しないでください。
私はちょうど混乱しているいくつかの知識を本当に感謝します。
あなたができるというだけで、良いアイデアだとは限りません。もし私が望むなら私の車を私の車に乗せることができます.... – ThingyWotsit
関数ポインタはどの関数も指し示すことができますが、ポインティングされた型が関数と正確に一致しない限りポインタを介して関数を呼び出すことはできません –
を指しています。「関数名は別の関数へのポインタにはなりません」と思いますか?ここでも何を意味していますか? 'FuncPtr'とは何ですか? C言語では大文字と小文字が区別されることに注意してください。 – Lundin