qsort函数

来源:百度知道 编辑:UC知道 时间:2024/06/27 18:07:14
#include <iostream.h>
#include <stdlib.h>
#include <string.h>

int compare(const void* a, const void* b);

char* list[5]={"cattle","car","cabet","cap","canon"};

void main()
{
//cout<<sizeof(list[2]);
qsort((void *)list,5,sizeof(list[0]),compare);
for(int i=0; i<5; i++)
cout <<list[i] <<endl;
}

int compare(const void* a, const void* b)
{
return strcmp(*(char**)a, *(char**)b);
}

我想问一下,那个char**是怎么一回事!!

char**是指向字符串指针的指针。
比如:
char* p = "hello";
char** pp = &p;
那么*pp就相当于p,指向"hello"这个字符串。
(char**)a就是把a转换成一个指向字符串指针的指针。*(char**)a就是一个字符串指针(char*)。可以传递给strcmp了。

在你贴的代码中。
list是一个字符串数组。对应的
list[0]是一个字符串,即char*
list[0]相当于*list,也是char*。可以用一个char**类型的变量存储。
本来compare函数应该是compare(char**, char**)这样的形式的。但是为了和qsort的要求的一致(qsort的要求第3个参数必须是int(*)(void*, void*)类型),参数用了void*类型。所以在后面可以把它转换回了它原来的类型,即char**类型。

实际这段代码就是把strcmp封装成满足qsort比较函数要求的形式,然后用来排序一个字符串数组。

注:上面的const都省略了,免得太花眼。

二级指针变量,建议你以后不要使用C风格字符串,建议使用C++标准库。