假設我有一個名爲Student
的結構。我有一個學生指針數組。qsort() - 比較函數參數
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);
}
的快速排序的最後部分是什麼,我不明白。我看到他們寫了&compare
的一些帖子,以及一些他們沒有寫的帖子。只有當我使用&compare
它工作。
我如何知道是否使用&
?
函數與數組在一種方式上類似:如果函數在指向函數的指針時使用,它將*衰減*到指針。通常使用例如安全'比較',但我建議你使用'&compare'來使代碼讀者更加明確。 –
你不需要任何裝飾,只需通過比較。 – Amit
'&'是明確的/可讀的,其用法與&array [0]完全相同:對任何知道該語言的人來說,都是令人困惑和無恥的醜陋。只需使用'compare'或'array'。請注意,在每次調用函數**時,如'func(x)'中的函數**,func的名稱正在衰減爲一個指針,因爲'()'運算符(函數調用)需要一個函數指針作爲其操作數。 –