我需要對指向數組的指針進行排序。實際上,我需要在地址之間進行搜索,以查看數組中是否存在給定結構的指針。不幸的是,在這些結構裏面我沒有什麼「可比的」,所以我想按地址排序。 我的代碼是這樣的:qsort和bsearch指針數組
item* arr[SIZE];
//something is inserted
qsort(arr, SIZE, sizeof(item*), (void*)compare_funct);
//CUT
bsearch(curr, arr, SIZE, sizeof(item*), (void*)compare_funct);
我試圖創建一個compare_funct只是轉換指針爲int並返回它們的區別,但它似乎並沒有工作。特別是,當我做bsearch時,即使我知道元素包含在數組中,我總是會得到一個NULL作爲返回值。
這比僅關閉類型檢查更糟糕:它是未定義的行爲。不能安全地將一個函數指針轉換爲數據指針,反之亦然。想象一下,在一個哈佛架構機器上(單獨的數據和程序總線),或者在小型(32位數據,16位函數指針)或中型存儲器型號(16位數據和32位函數指針)中的舊DOS編譯器上會發生什麼。 – 2011-05-29 15:49:32
雖然我們在這裏,'b-a'也是未定義的行爲,除非'b'和'a'碰巧指向一個公共數組。可移植版本是'memcmp(&a,&b,sizeof a);' - 比較指針逐字節的*表示而不是嘗試去改變它們的區別。 – 2011-05-29 16:39:36
你可以簡化它只是'memcmp(p,q,sizeof(item *));' – 2011-05-29 16:41:06