Указатели на функции - C (СИ) (72087)
Формулировка задачи:
Книга Кернигана и Ритчи, пример из нее. Цитирую
Прототип
Вызов
В вызове у меня сразу подчеркивает ошибку, мол несогласованность типов в условной операции numeric ? numcmp : strcmp, где numeric переменная с нулем или единицей, а numcmp фун. с двумя аргументами char и strcmp с двумя const char. Какое отношение имеет numcmp к strcmp???
Интересно, как присваивается значение к указателю (синтаксис)
1) Где еще так можно присваивать?
2) И можно ли записать эту ситуацию по другому?
3) И почему находит ошибку в тернарной операции? Функции numcmp и strcmp по сути друг к другу не имеют отношения.
И еще имея указатель на функцию int (*pwm)(void*, void*);
и функцию int func(char*, char*)
нельзя присвоить pwm = func;
4) А в аргументе функции так присвоить получается можно?
То есть, если указатель на функцию объявлен в виде параметра функции, как в прототипе
Прокомментируйте пожалуйста
Как видно из прототипа, функция 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));
, (int(*)(void *, void *)) (numeric ? numcmp : strcmp) );
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 *));
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д