[英]What does this mean in C?
我目前正在學習 qsort 函數,我遇到了 compare 函數:
int cmpfunc (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
我不明白為什么我們使用*(int*)a
。 這是什么東西,有什么用? 為什么const void *a
而不是簡單的int a
?
由於 qsort 應該能夠對任何類型的事物(包括結構)的數組進行排序,因此它傳遞(作為其比較方法的參數)一個指向要比較的每個事物的指針。 這些可以是任何東西,所以使用的類型是“void *”,它可以是指向任何東西的指針。 然后,您的比較方法應該將該指針轉換為正確類型的指針(在本例中為int *
因為您正在比較兩個整數。然后您取消引用該轉換指針以比較指向的值,因此*(int *)
(int*) 對空指針之前的變量“a”的內存地址進行類型轉換。 之前的 * (int*) 訪問內存地址的整數值。 使用 void *a 是因為這是一個通用函數,例如,您可以使用它來比較兩個字符。
您的代碼在功能上等同於:
int cmpfunc(const int* a, const int* b)
{
return(*a - *b);
}
換句話說, (int*)a
將您的void* a
轉換為整數指針類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.