#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 5
typedef struct {
//char name[10];
char *name;
int age;
} Stu;
int compar(const void *a, const void *b) {
return ((Stu*)a) -> age - ((Stu *)b) -> age;
}
int compar1(const void *a, const void *b) {
return strcmp( ((Stu*)a) -> name, ((Stu *)b) -> name );
}
int main() {
Stu emp[SIZE] = {
{"Elaine", 23}, {"Jerry", 25}, {"Kramer", 20}, {"George", 22}, {"Newman", 19}
};
//qsort(emp, SIZE, sizeof(*emp), compar);
qsort(emp, SIZE, sizeof(*emp), compar1);
int i;
for (i = 0; i < SIZE; i++) {
printf("%7s -> %d\n", (emp+i)->name, (emp+i)->age);
}
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 5
int compar(const void *a, const void *b) {
return strcmp( *(char **)a, *(char **)b );
//这里为什么是char**需要真正弄清楚。
}
int main() {
char *names[SIZE] = {"Kramer", "Elaine", "Jerry", "Newman", "George"};
//char **p = names + 1; //names + 1的类型是char**。
//printf("%s\n", *p);
qsort(names, SIZE, sizeof(*names), compar); //传递给compar的变量值是names + 1, names + 2, ... 而这些值的类型是char **,这就是为什么在compar函数中类型强制转换时,要使用char**。
int i;
for(i = 0; i < SIZE; i++) {
printf("%s\n", *(names + i));
}
return 0;
}