Допустим, у меня есть структура с именем Student
.
typedef struct student {
int age;
char name[10];
} Student;
И у меня есть массив указателей на студентов.
Student *a[10];
Мне нужно отсортировать массив по именам студентов. Поэтому я написал функцию сравнения:
int compare(const void *a, const void *b){
Student *temp1=*(Student **)a;
Student *temp2=*(Student **)b;
return strcmp(temp1->name, temp2->name);
}
Затем у меня есть функция для сортировки:
void SortArray(Student *a[], int len){
qsort(a, len, sizeof(Student *), *compare*);
printArray(a);
}
Последняя часть qsort - это то, чего я не понимаю. Я видел несколько постов, где писали &compare
, а некоторые нет. Только когда я использовал &compare
, это сработало.
Как узнать, использовать ли &
или нет?
compare
, но я рекомендую вам использовать&compare
, чтобы сделать его более понятным для читателей кода. - person Some programmer dude   schedule 14.10.2017compare
. - person Amit   schedule 14.10.2017&compare
является явным/читабельным точно так же, как&array[0]
: сбивает с толку и необоснованно уродливым для любого, кто знает язык. Просто используйтеcompare
илиarray
. Обратите внимание, что каждый раз, когда вы вызываете функцию, как в случаеfunc(x)
, имяfunc
уменьшается до указателя, поскольку оператор()
(вызов функции) требует в качестве операнда указатель на функцию. - person R.. GitHub STOP HELPING ICE   schedule 14.10.2017