假设我在C语言中有一个指向字符指针的数组:
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
的用途吗?我完全不理解。为什么要双指针?为什么我的原始函数不起作用?
谢谢,Boda Cydo。
data
应该声明为const
。 - Billy ONealconst
的,但是其中包含的指针应该是const
类型的。你不能修改编译时常量文字(这样做是未定义的行为)。如果你想要达到这个目的,你需要使用const char *data[5]
。如果你想让整个数组都是常量,那么你需要使用const char * const data[5]
。 - Billy ONeal