假设我在 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
这个函数的用法?我完全不明白。为什么是双指针?为什么我原来的功能不起作用?
谢谢,博达赛多。