Citat:
poljane:
Hvala puno,
To je jasno , ali zar ovo drugo ( int(*)() ) ne bi trebalo biti pokazivac na f-iju koja vraca int?
Mada je ,,DragiTata'' dao potpun odgovor (mada i malo spartanski :), objasniću ono što tvoj primer koristi, a nije prikazano u njegovom primeru.
Naime, ti najverovatnije imaš dve razne funkcije:
Code:
int numcmp(int *a, int *b);
int strcmp(char *a, char *b);
E sada, pošto qsort ima navedenu deklaraciju, onda ti radiš kast bilo koje od ove dve funkcije na traženu.
Naravno, parameter qsort-a nije sama funkcija, već pokazivač na nju, i to ti ovaj kast obezbeđuje.
Ukoliko sebi dopustiš malo
pesničke slobode, taj kast ti nije ni potreban, već možeš koristiti samo (numeric? numcmp:strcmp), a rezultat će biti isti uz C prevodioc (plus/minus jedno upozorenje; C++ prevodioci bi trebali malo više da se pobune, čak možda i da ne dopuste kod, iz razloga koji su jasni kada se upoznaju dodatne mogućnosti istog).
Znači ključna ideja je ideja kasta: davanje određenog tipa vrednosti koja je nekog drugog tipa. Koristiš kada želiš da od int-a napraviš pokazivač, ili obrnuto, ali sadržaj memorije se ne menja (znači nećeš dobiti ,,očekivani'' rezultat ako kastuješ int na float).
Nadam se da je sada jasnije šta god da sam ja to hteo da kažem :)
Pozdrav
PS. Da dodam da je ,,demikrosoftovana'' deklaracija qsort funkcije prema cenjenom ISO C standardu
Code:
void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *));
Možda se moje mišljenje promenilo, ali ne i činjenica da sam u pravu.