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);这边要这样写。


总结

后面可以回顾一下。

相关推荐
剑心诀1 小时前
02 数据结构(C) | 线性表——顺序表的基本操作
c语言·开发语言·数据结构
m0_488633321 小时前
Windows环境下编译运行C语言程序,合适工具与方法很关键
c语言·windows·git·开发工具·编译器
m0_488633322 小时前
C语言变量命名规则、入门自学、运算符优先级及数据结构介绍
c语言·数据结构·运算符优先级·变量命名·入门自学
Book思议-2 小时前
【数据结构实战】川剧 “扯脸” 与栈的 LIFO 特性 :用 C 语言实现 3 种栈结构
c语言·数据结构·算法·
炸膛坦客5 小时前
单片机/C/C++八股:(二十一)include <> 和 include ““ 的区别
c语言·c++
Yupureki5 小时前
《Linux系统编程》12.基础IO
linux·运维·c语言·开发语言·数据库·c++
炸膛坦客5 小时前
单片机/C/C++八股:(十八)C/C++ 中 sizeof 和 strlen 的区别
c语言·c++
看山是山_Lau5 小时前
代码命名规范原则与原理
c语言·开发语言
计算机安禾7 小时前
【数据结构与算法】第6篇:线性表(二):单链表的实现(头插法、尾插法)
c语言·数据结构·学习·算法·链表·visual studio code·visual studio
计算机安禾7 小时前
【数据结构与算法】第5篇:线性表(一):顺序表(ArrayList)的实现与应用
c语言·开发语言·数据结构·c++·算法·visual studio code·visual studio