我有類似的「通用」過程,如qsort,它有一個void指針(指向一個數組),還有一個函數指針參數。這個函數應該適用於任何類型的數組。如何遍歷數組參數作爲void指針
例子:
void do_something(void * array, int count, int size, void (*test)(const void*)){
int i;
for(i=0; i<count; i++){
test(array + (index * size));
}
}
然而,這給了我下面的警告(GCC test.c的-pedantic-錯誤):
error: pointer of type ‘void *’ used in arithmetic [-Wpedantic]
而且一些研究,我發現後,這是一個不好的做法,使用這樣的void指針。 (例如Pointer arithmetic for void pointer in C)
那麼標準庫如何爲qsort這樣的東西做這種東西?縱觀這段代碼:(http://aturing.umcs.maine.edu/~sudarshan.chawathe/200801/capstone/n/qsort.c),我看到以下內容:
void
_quicksort (void *const pbase, size_t total_elems, size_t size,
__compar_fn_t cmp)
{
register char *base_ptr = (char *) pbase;
....
char *lo = base_ptr;
char *hi = &lo[size * (total_elems - 1)];
...
}
難道他們鑄造(字符*),而不管實際類型的?
那麼使用_char_不會比使用_void_ :)更多類型關於char的關節做這項工作(使用_size_步驟移動)。 – hexasoft