之前一直用qsort对整型数组进行排序,qsort同样可以对字符数组排序。但是这次对字符串指针数组排序,属实是绕了一会,记录一下。
文章目录
[2、qsort 写法](#2、qsort 写法)
前言
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);这边要这样写。
总结
后面可以回顾一下。