qsort对字符型指针数组排序

之前一直用qsort对整型数组进行排序,qsort同样可以对字符数组排序。但是这次对字符串指针数组排序,属实是绕了一会,记录一下。

文章目录

前言

一、字符型指针数组排序

1、qsort头文件

[2、qsort 写法](#2、qsort 写法)

3、对字符型指针数组进行排序

总结


前言

qsort排序


一、字符型指针数组排序

1、qsort头文件

cpp 复制代码
#include <stdlib.h>

2、qsort 写法

cpp 复制代码
void qsort (void *base, size_t nitems, size_t size, int (*compar) (const void *, const void*)) 

3、对字符型指针数组进行排序

cpp 复制代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define STRING_COUNT   4

int comp(const void* a, const void* b)
{
    int diff = strcmp((char*)((int*)(*(int*)a)) , (char*)((int*)(*(int*)b)));
    return diff;
}

int main()
{
    char *p[STRING_COUNT];
    for(int i = 0; i < STRING_COUNT; i++)
    {
        p[i] = (char*)malloc(sizeof(char) * 10);
    }
    p[0] = "hello!";
    p[1] = "world";
    p[2] = "test";
    p[3] = "goodbye";

    qsort(p, STRING_COUNT, sizeof(char*), comp);
    for(int i = 0; i < STRING_COUNT; i++)
    {
        printf("%s\n", p[i]);
    }
}

//goodbye
//hello!
//test
//world

过程中也是调试了很多次!

理解为qsort将指针数组的成员,即指针传给comp函数,comp的形参接受的是指针数组的成员。这个成员对应的是char型数组的地址。所以形参是地址。地址要看成是int型,强制类型转换成int型,再将常量强制转换成地址的方式(unsigned int*)转成地址类型,即可以解析出char型字符串。

作为strcmp的参数还有再转成(char*)。

另外qsort(p, STRING_COUNT, sizeof(char*), comp);这边要这样写。


总结

后面可以回顾一下。

相关推荐
人邮异步社区12 小时前
怎么把C语言学到精通?
c语言·开发语言
xiaobobo333017 小时前
C语言中宏定义宏名和宏值之间的关系
c语言·宏定义·语义型
a44931536221 小时前
MacBook USB-C不充电故障诊断:从PD握手到主板供电链路
c语言·开发语言·macos·电脑
a4493153621 天前
iPhone 充电故障的全链路诊断——从 Lightning/USB-C 接口到 Tristar 充电 IC
c语言·macos·ios·电脑·硬件架构·iphone
qq_448011161 天前
C语言中的getchar()
c语言·开发语言
天空'之城1 天前
C 语言工业级通用组件手写 15:累加和校验
c语言·嵌入式开发·工业级组件·累加和校验
碎光拾影2 天前
i.MX6ULL时钟系统配置指南
c语言·arm开发·嵌入式硬件
GeekArch2 天前
第28讲:避坑——AI堆栈分配错误、栈溢出BUG
c语言·人工智能·stm32·mcu·学习·bug
wuyk5552 天前
59.嵌入式C语言高级宏定义实战:多行宏、字符串化与符号拼接
c语言·开发语言·stm32·单片机·嵌入式硬件·物联网·51单片机
无相求码2 天前
C程序的内存到底怎么分的?栈、堆、全局区一张图讲清楚
c语言