假設我有一個指針數組在C CHAR:如何在C中對指向char的指針數組進行排序?
char *data[5] = { "boda", "cydo", "washington", "dc", "obama" };
我想用快速排序排序此陣:
qsort(data, 5, sizeof(char *), compare_function);
我無法拿出比較功能。出於某種原因,這不起作用:
int compare_function(const void *name1, const void *name2)
{
const char *name1_ = (const char *)name1;
const char *name2_ = (const char *)name2;
return strcmp(name1_, name2_);
}
我做了很多的搜索,發現我不得不使用**
快速排序的內部:
int compare_function(const void *name1, const void *name2)
{
const char *name1_ = *(const char **)name1;
const char *name2_ = *(const char **)name2;
return strcmp(name1_, name2_);
}
而這個工作。
任何人都可以解釋在這個函數中使用*(const char **)name1
嗎?我根本不理解它。爲什麼是雙指針?爲什麼我的原始功能沒有工作?
謝謝,Boda Cydo。
的背景下'data'應聲明'const'。 – 2010-08-15 20:47:51
比利,如果它是常量,它仍然可以排序嗎? – bodacydo 2010-08-15 20:48:59
是的。該數組可以不是'const',但包含在該數組中的指針應該是'const'。你不能修改像這樣的編譯時常量字面值(這是未定義的行爲)。爲了得到這個,你需要'const char * data [5]'。如果你希望數組本身也是恆定的,那麼你應該做'const char * const data [5]'。 – 2010-08-15 20:53:04