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**是怎么一回事!!
#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++标准库。