排序qsort
- int
int cmp(const void *a, const void *b)
{
return *(int *)a - *(int *)b;//先强转成int型,后解引用取值比较大小
}
- 字符串数组 char a[] = “hello world” //字符串数组,存放的是字符
int cmp(const void *a, const void *b)
{
return *(char*)a - *(char *)b;//实质是转化成ascii值比较;
}
- 字符串指针数组排序 char *b[] = { “hello” , “world”};字符串指针数组,存放的是指针即元素地址,指针指向其中的元素
int cmp(const void *a, const void *b)
{
return strcmp(*(char **)a, *(char**)b);
- 结构体排序
struct Stu
{
int age;
char name[20];
};
//比较结构体中元素的年龄
int cmp_age(const void* e1, const void* e2)
{
//本质是比较整形
return ((struct Stu*)e1)->age - ((struct Stu*)e2)->age;
}
//比较名字
int cmp_name(const void* e1, const void* e2)
{
//本质是字符串比较->使用strcmp函数
return strcmp(((struct Stu*)e1)->name, ((struct Stu*)e2)->name);
}
补充字符串
- 字符串定义:
char *str1 = {"Hello world!"}; // 方式一 (可省略{})
char str2[] = {"Hello world!"}; // 方式二 (可省略{})
char str3[] = {'H', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '!', '\0'}; // 方式三
char str4[16] = {'H', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '!', '\0'}; // 方式四
- 字符串指针数组
char* parr[] ={"good head","strength body","smooth foot"} ;
那么数组首元素是char* 类型的,char*类型的地址就是char**是二级指针。