//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),\是指针的指针,需要go 引用才能比较. 是对的吗?

推荐答案

赋予qsort的比较函数传递两个成员的地址进行比较. 由于数组包含类型char *的元素,因此这些成员的地址为类型char **.

strcmp函数需要一对char *,因此每个const void *参数必须首先转换为预期的类型const char **并解除引用以获得strcmp的正确类型.

C++相关问答推荐

奇怪的print在getchar和getchar跳过后不工作

当办公室阻止Visual Studio时编码和编译C

有关字符数组指针和次指针以及qsort函数中的cmp函数的问题

海湾合作委员会是否保证大小匹配的访问?

为什么信号量为空= 0,而不是阻塞?

是否定义了数组指针类型转换为指针类型?""""

为什么可以通过指向常量int的指针间接地改变整数的值?

LibpCap禁用监视器模式(C、MacOS)

C语言编译阶段与翻译阶段的关系

在C语言中,在数学运算过程中,为什么浮点数在变量中的行为不同

`#if`条件中是否允许`sizeof`?

理解C版宏(看起来像未声明的变量?)

如何计算打印二叉搜索树时每行所需的空间?

为什么Fread()函数会读取内容,然后光标会跳到随机位置?

接受任何参数的函数指针是否与接受不同参数的函数兼容

安全倒计时循环

在C中使用无符号整数模拟有符号整数

C中的空指针是什么(_N)?

在C中交换字符串和数组的通用交换函数

malloc:损坏的顶部大小无法找出问题