qsort(3)
庫例程的聯機幫助頁提供了一個將在命令行中作爲參數給出的單詞進行排序的示例。比較功能如下:qsort(3)的manpage是正確的嗎?
static int
cmpstringp(const void *p1, const void *p2)
{
/* The actual arguments to this function are "pointers to
pointers to char", but strcmp(3) arguments are "pointers
to char", hence the following cast plus dereference */
return strcmp(* (char * const *) p1, * (char * const *) p2);
}
但是這裏排序的是argv
的元素。現在argv
是一個指向字符指針的指針,它可以被看作是指向字符的指針表。
因此,它的元素是指向字符的指針,所以cmpstringp
的實際參數不應該是指向字符的指針,而不是「指向char指針的指針」?
如果你正在整理一個整數數組,你會希望將'const void * p1'轉換爲'int',而不是'const int *'?那麼10KB結構的數組呢,其中的元素要大得多以至於void *可能會是什麼呢? – 2010-11-09 22:31:35
從該代碼開始工作以瞭解發生的事情是完全合理的,但您可能需要重新考慮問題的標題。我的意思是,你是否意識到手冊頁和代碼已經存在多久? *許多*眼球如何吸引他們? – dmckee 2010-11-10 00:01:56