Disons que j'ai une structure appelée Student
.qsort() - compare le paramètre de fonction
typedef struct student {
int age;
char name[10];
} Student;
Et j'ai un tableau de pointeurs aux étudiants.
Student *a[10];
J'ai besoin de trier le tableau par les noms des étudiants. J'ai donc écrit la fonction de comparaison:
int compare(const void *a, const void *b){
Student *temp1=*(Student **)a;
Student *temp2=*(Student **)b;
return strcmp(temp1->name, temp2->name);
}
Ensuite, je dois la fonction pour trier:
void SortArray(Student *a[], int len){
qsort(a, len, sizeof(Student *), *compare*);
printArray(a);
}
La dernière partie du qsort est ce que je ne comprends pas. J'ai vu quelques messages où ils ont écrit &compare
, et d'autres où ils ne l'ont pas fait. Seulement quand j'ai utilisé &compare
cela a fonctionné. Comment savoir si utiliser &
ou non?
Les fonctions sont similaires à des tableaux dans un sens: Si la fonction est utilisée quand un pointeur sur une fonction, il va * décroître * à un pointeur. Il est généralement sûr d'utiliser par exemple.'comparer 'seulement, mais je vous recommande d'utiliser' & compare' pour le rendre plus explicite pour les lecteurs du code. –
Vous n'avez pas besoin de décoration, il suffit de passer 'compare'. – Amit
'& & compare' est explicite/lisible exactement de la même manière' & array [0] 'est: confus et gratuitement gratuit pour quiconque connaît la langue. Utilisez simplement 'compare' ou' array'. Notez que ** chaque fois que vous appelez une fonction **, comme dans func (x) ', le nom' func' se décompose en un pointeur car l'opérateur '()' (appel de fonction) requiert un pointeur de fonction comme opérande . –