我想排序一個結構運行數組稱爲結果由char,但是當我打印數組時,沒有排序。看看這個:qsort結構數組不工作
struct run {
char name[20], weekday[4], month[10];
(And some more...)
};
typedef struct run run;
int name_compare(const void *a, const void *b)
{
run *run1 = *(run **)a;
run *run2 = *(run **)b;
return strcmp(run1->name, run2->name);
}
int count_number_of_different_persons(run results[])
{
int i = 0;
qsort(results, sizeof(results)/sizeof(run), sizeof(run), name_compare);
for(i = 0; i <= 999; i++)
{
printf("%s\n", results[i].name);
}
// not done with this function yet, just return 0
return 0;
}
從上面的輸出僅僅是一個名字在他們的順序最初放置
'void * a'和'void * b'是指向數組項的指針。如果數組本身由指向struct類型的指針組成,那麼'void * a'的正確類型就是'(run **)a'。這仍然只是一個指向指針的指針,所以爲了獲得指向結構體的指針,這個指針指針必須被解除引用。因此,'*(run **)a'。雖然它看起來像這裏,但數組不是指針數組,而是一個直線數組,因此在聲明'(run *)a'時會進行正確的轉換。 (我剛纔遇到這個問題,發現這篇文章,認爲它會幫助其他人)。 –
@NickBauer,我真的希望它能幫助別人,但4年後,我無法真正解密它,因爲它脫離了語境,也懶得重讀和重新思考原始問題和答案。 –