我遵循LCTHW教程,我有一個任務要做。 這是數據結構:C指針數組int的比較器
typedef struct DArray {
int end;
int max;
size_t element_size;
size_t expand_rate;
void **contents;
} DArray;
我宣佈一個typedef:
typedef int (*DArray_compare) (const void *a, const void *b);
當我創建一個排序的功能,我傳遞給它一個DArray_compare,問題是,我不瞭解如何做這個比較的例子。
我試圖做這樣的事情:
int compare(const void *a, const void *b)
{
int i = (int)*a;
int k = (int)*b;
printf("%d %d\n", i, k);
return i - k;
}
但我得到一個錯誤:
error: operand of type 'void' where arithmetic or pointer type is required int i = (int)*a;
的問題是:在不改變結構和比較的類型定義,我想創建一個比較int的比較器,我該怎麼做?
你需要澄清一下上下文。比較函數的參數究竟是什麼?它是數組中兩個'DArray'結構的地址,還是指向數組中兩個結構的兩個'int'元素的指針?或者是其他東西?大部分答案都假設你傳遞了兩個指向整數的指針,因爲這就是你的問題似乎表明正在發生的事情,但是一個通用的排序函數將會使用指向這些結構的指針。請注意,您的減法存在簽名「int」溢出的風險,這會導致未定義的行爲。 –
比較函數的參數是數組元素的指針。 – AR89
然後,你的參數'a'和'b'實際上就是'DArray'指針,但是你可以將它們當作第一個元素('end')的指針,使用各種符號,比如接受的答案。 –