Указатели на функции - C (СИ) (72087)

Узнай цену своей работы

Формулировка задачи:

Книга Кернигана и Ритчи, пример из нее. Цитирую
Как видно из прототипа, функция qsort в качестве своих аргументов ожидает массив указателей, два целых значения и функцию с двумя аргументами-указателями. В качестве аргументов-указателей заданы указатели обобщенного типа void*. Любой указатель можно привести к типу void* и обратно без потери информации, поэтому мы можем обратиться к qsort, предварительно преобразовав аргументы в void*. Внутри функции сравнения ее аргументы будут приведены к нужному ей типу.
Прототип
void qsort(void *lineptr[], int left, int right, int(*comp)(void *, void *));
Вызов
qsort((void **)lineptr, 0, nlines - 1, (int(*)(void *, void *)) (numeric ? numcmp : strcmp));
В вызове у меня сразу подчеркивает ошибку, мол несогласованность типов в условной операции numeric ? numcmp : strcmp, где numeric переменная с нулем или единицей, а numcmp фун. с двумя аргументами char и strcmp с двумя const char. Какое отношение имеет numcmp к strcmp??? Интересно, как присваивается значение к указателю (синтаксис)
,  (int(*)(void *, void *)) (numeric ? numcmp : strcmp)  );
1) Где еще так можно присваивать? 2) И можно ли записать эту ситуацию по другому? 3) И почему находит ошибку в тернарной операции? Функции numcmp и strcmp по сути друг к другу не имеют отношения. И еще имея указатель на функцию int (*pwm)(void*, void*); и функцию int func(char*, char*) нельзя присвоить pwm = func; 4) А в аргументе функции так присвоить получается можно? То есть, если указатель на функцию объявлен в виде параметра функции, как в прототипе
void qsort(void *lineptr[], int left, int right, int(*comp)(void *, void *));
Прокомментируйте пожалуйста

Решение задачи: «Указатели на функции»

textual
Листинг программы
void qsort(void *lineptr[], int left, int right, int(*comp)(void *, void *));

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.2 из 5
Похожие ответы