假设我有一个指向 C 中 char 的指针数组:
char *data[5] = { "boda", "cydo", "washington", "dc", "obama" };
我希望使用 qsort 对该数组进行排序:
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_);
}
我做了很多搜索,发现我必须使用**
qsort 内部:
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
在这个函数中?我根本不明白。为什么是双指针?为什么我原来的功能不起作用?
谢谢,博达·西多。