簡體   English   中英

這在 C 中是什么意思?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM