You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于qsort中cmp函数的字符数组指针与二级指针问题咨询

qsort排序字符串数组的cmp函数疑问解答
//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);
}

为什么必须用二级指针,不能直接返回strcmp(w1, w2)?

  • qsort的工作逻辑是:把你传入的数组(这里是words)当成连续的元素集合,每次调用cmp函数时,会传入指向两个待比较元素的指针。
  • 你的words是char*类型的数组,每个元素是一个指向字符串的指针(char*)。所以qsort传给cmp的w1和w2,本质是指向这些char*元素的指针,也就是char**类型(二级指针)。
  • strcmp函数要求的参数是指向字符串首字符的指针(char*),如果直接传w1和w2,相当于把char**类型的指针强转成char*传给strcmp,这时候strcmp会把w1本身的地址当成字符串的起始地址去读取,完全不是你要比较的目标字符串,自然会出错。

你的理解是否正确?

完全正确。w1和w2确实是指向words[i](字符串首指针)的指针,属于二级指针,必须通过解引用*str1、*str2拿到真正的字符串指针,才能交给strcmp做字典序比较。

内容的提问来源于stack exchange,提问作者Borges

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 17:42:38