Я знаю, что это дубликат. Я уже искал, но никто не решает проблему, с которой я сталкиваюсь. ПРИМЕЧАНИЕ в попытке устранить мою путаницу я попытался упростить приведение типа к оригиналу. Надеюсь, это не неопределенное поведение
Объявление указателя на функцию
Int (*funcPtr)(void*,void*);
декларация strcmp
int strcmp (char *, char *);
Приведение типа указателя на функцию
FuncPtr = (int (*)(void*, void*))strcmp
Вот тут я запутался. Я понимаю преобразование типа указателя функции, который мы создали. Например, приведение типа FuncPtr просто меняет тип функции, на которую может указывать funcPtr. Я также читал, что имя функции является указателем функции на себя, поэтому приведение типов strcmp и использование моего понимания выше,
int (*)(void*, void*))strcmp
Strcmp теперь может указывать на функцию, которая принимает два указателя на void и возвращает int, что явно неверно, как и массивы. Я думаю, что имя функции не может быть указателем на другую функцию.
Из-за моего понимания выше я не вижу, как вы можете назначить адрес strcmp для FuncPtr со следующим приведением типа
FuncPtr = (int (*)(void*, void*))strcmp
Поскольку изменение того, на что указывает указатель функции strcmp, не меняет аргументы и тип возвращаемого значения strcmp.
Я был бы очень признателен за некоторые знания, я просто так запутался.
FuncPtr
, какого типа? Обратите внимание, что язык C чувствителен к регистру. - person Lundin   schedule 08.05.2017int (*)(void*, void*))
, а затем привести адресstrcmp
к этому типу? то я могу ответить на него. Однако все остальное в вашем вопросе делает его неясным. Также для записи, strcmp имеет следующий формат, который здесь имеет значение:int strcmp(const char *s1, const char *s2);
. - person Lundin   schedule 08.05.2017int(*foo)(int, int)
, используяint (*foo) (int, ...);
(конечно, с двумя аргументами, а второй тожеint
). Я видел это много. - person Ajay Brahmakshatriya   schedule 08.05.2017void*
. - person Lundin   schedule 08.05.2017