2013-08-23 183 views
0
qsort(words, size1, size2, compareWords); 

內比較的話:Ç快速排序字符串數組

int compareWords(const void *ac, const void *bc) 

這個工程:

char const *a = *(const char **)ac; 

這些不(a得到一些垃圾值):

char const *a = ac; 
    char const *a = (const char *) ac; 

基本原理是什麼?

而且,在一些示例中,我將size2設爲sizeof(char *)。不應該是sizeof(*words)

話被聲明爲: char *words[] = {"abc", "pqr", "abcd", "pqsl"};

+0

您必須顯示'words'的聲明,因爲您在詢問有關如何訪問它的問題。 – unwind

+0

你說得對,'size2'是一個元素的大小。所以,'size2 = sizeof(* words)'或更好'size2 = sizeof(char)'。 – Michael

+0

@Michael是sizeof(* words)= sizeof(char)??在我的例子單詞數組中,sizeof(* words)出現爲4,而sizeof(char)= 1。我不認爲它們是相同的。 – Sushil

回答

3

qsort荷蘭國際集團T的數組,你的比較函數必須在其const void*指針轉換爲const T*,因爲T不能用價值來考慮。

如果wordschar*char const *一個數組,你必須的參數分別轉換爲char* const *char const * const *,當說這樣很自然。

+0

hey,thx,但是確切地說我想知道'*(const char **)ac'是什麼 - 對我來說似乎很不直觀......用(const char *)進行類型轉換有什麼問題? – Sushil

+1

您有一個'char *'數組,並且比較函數總是接收*指向數組*中的元素的指針。因此,指向'char *'的指針。這些指針也碰巧是const的,所以'*(const char **)ac'不是const正確的,儘管沒有實際的結果,因爲你不試圖寫這個指針。 – Medinoc