Hay las siguientes declaraciones:una pregunta acerca de la función de puntero en C
void qsort(void *lineptr[], int left, int right, int (*comp)(void *, void *));
int numcmp(char *, char *);
int strcmp(char *s, char *t);
Entonces, en algún lugar en el programa existe la siguiente llamada:
qsort((void**) lineptr, 0, nlines-1,
(int (*)(void*,void*))(numeric ? numcmp : strcmp));
(No haga caso de los tres primeros argumentos y numeric
) .
me preguntan qué es lo siguiente:
(int (*)(void*,void*))(numeric ? numcmp : strcmp)
entiendo que qsort
está esperando un "puntero a función que recibe dos void
punteros y devuelve un int
" ya que es cuarto argumento, pero cómo lo que está escrito arriba satisface eso? Me parece un tipo de elenco porque está hecho de dos paréntesis, pero sería un lanzamiento muy extraño. Porque toma una función y hace de esta función un "puntero a la función que obtiene dos punteros void
y devuelve un int
". Que no tiene sentido
(Seguí aquí la regla de que un tipo type
entre paréntesis antes de que una variable promueva la variable a ese tipo).
Así que creo que me equivoco, tal vez alguien me puede decir cómo leer esto, ¿cuál es el orden?
¿Por qué no tiene sentido? Me parece bien. – cadrian
Porque tomas una función y la vuelves inútil. Se convierte en solo un puntero. Ya no es una función. Además, ¿qué se está pasando a qsort? solo un puntero que se supone que apunta a la función, pero nadie nunca le dijo a qué función. También creo que convertir un func 'en un puntero se está reduciendo –
Un puntero a una función es * un puntero de función * ... que es perfectamente utilizable como una función, gracias ... – Varkhan