//Sort character array lexicographically (main code):
char* words[MAX_SIZE];
qsort(words, len, sizeof(char*), cmp);
int cmp(const void* w1, const void* w2) {
char** str1 = w1;
char** str2 = w2;
return strcmp(*str1, *str2);
//return strcmp(w1, w2);
}
为什么cmp函数必须定义辅助指针才能正常输出?为什么不能直接返回strcmp(w1, w2);? 请!救命!
我的理解是w1和w2是指向字符串头指针(words[i])的指针(words),\是指针的指针,需要解引用才能比较。 是吗?
给
qsort
的比较函数传递两个成员的地址进行比较。由于数组包含类型为 char *
的元素,因此这些成员的地址具有类型 char **
。
strcmp
函数需要一对char *
,因此每个const void *
参数必须首先转换为预期的const char **
类型并取消引用以获得strcmp
的正确类型。