Compulsived 2023-11-07 16:33 采纳率: 84.6%
浏览 4
已结题

一道有关二级指针的问题,包含传参与算法

img


相请给我讲解一下他这个cmp函数中指针的用法,然后还有思路。

  • 写回答

3条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-11-07 19:28
    关注

    【以下回答由 GPT 生成】

    在这个代码中,cmp函数被用作qsort函数的比较函数,用于按照字典顺序对字符串进行排序。具体来说,cmp函数使用了指向指针的指针,其中a和b分别指向要比较的两个字符串指针的地址。

    在比较函数cmp中,参数a和b被声明为指向const void类型的指针。这是因为qsort函数需要一个通用的比较函数,它可以处理任意类型的指针。由于字符串指针本质上是字符指针的一种形式,可以将它们进行强制类型转换,并将它们视为指向指针的指针,即指向char *类型的指针的指针。

    在cmp函数中,我们首先将a和b转换为指向char 类型的指针,然后通过dereference操作符获取指针指向的char 类型的指针,最后使用strcmp函数来比较这两个字符串。strcmp函数返回一个整数值,指示两个字符串的比较结果。

    解决这个问题的思路是,在主函数中动态分配一个存储字符串指针的数组,并为每个字符串指针分配足够的内存。然后使用输入函数从用户那里获取要排序的字符串,并将它们存储在数组中。最后,使用qsort函数对字符串数组进行排序,使用cmp函数来确定排序顺序。最终,通过循环打印排序后的字符串数组。

    代码解决方案如下所示:

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    int cmp(const void *a, const void *b) {
        return strcmp(*((char **)a), *((char **)b));
    }
    
    int main(int argc, char *argv[]) {
        int n = 0;
        int i;
        printf("请输入需要排序的单词个数:\n");
        scanf("%d", &n);
    
        char **s = (char **)malloc(n * sizeof(char *));
        for (i = 0; i < n; i++) {
            s[i] = (char *)malloc(100 * sizeof(char));
            scanf("%s", s[i]);
        }
    
        qsort(s, n, sizeof(char *), cmp);
    
        for (i = 0; i < n; i++) {
            printf("%s\n", s[i]);
        }
    
        return 0;
    }
    

    请注意,这只是一种解决方案,并不是唯一的解决方案。根据具体要求和环境,还可以有其他的实现方式。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 11月22日
  • 已采纳回答 11月14日
  • 创建了问题 11月7日

悬赏问题

  • ¥30 电脑误删了手机的照片怎么恢复?
  • ¥15 (标签-python|关键词-char)
  • ¥15 python+selenium,在新增时弹出了一个输入框
  • ¥15 苹果验机结果的api接口哪里有??单次调用1毛钱及以下。
  • ¥20 学生成绩管理系统设计
  • ¥15 来一个cc穿盾脚本开发者
  • ¥15 CST2023安装报错
  • ¥15 使用diffusionbert生成文字 结果是PAD和UNK怎么办
  • ¥15 有人懂怎么做大模型的客服系统吗?卡住了卡住了
  • ¥20 firefly-rk3399上启动卡住了