#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//void menu()
//{
// printf("****************************\n");
// printf("***** 1.add 2.sub *****\n");
// printf("***** 3.mul 4.div ****\n");
// printf("***** 5.Xor 0.exit ****\n");
// printf("****************************\n");
//}
//
//int Add(int x, int y)
//{
// return x + y;
//}
//int Sub(int x, int y)
//{
// return x - y;
//}
//int Mul(int x, int y)
//{
// return x * y;
//}
//int Div(int x, int y)
//{
// return x / y;
//}
//int Xor(int x, int y)
//{
// return x ^ y;
//}
//int main()
//{
// int input = 0;
// int x = 0;
// int y = 0;
// pfArr是一个函数指针数组 - 转移表
// int(*pfArr[])(int, int) = { 0,Add,Sub,Mul,Div,Xor};
// do
// {
// menu();
// printf("请选择:>");
// scanf("%d", &input);
// if (input >= 1 && input <= 5)
// {
// printf("请输入两个操作数:>");
// scanf("%d%d", &x, &y);
// int ret = pfArr[input](x, y);
// printf("%d\n", ret);
// }
// else if (input == 0)
// {
// printf("退出\n");
// }
// else
// {
// printf("选择错误\n");
// }
// } while (input);
// return 0;
//}
//void Calc(int(*pf)(int, int))
//{
// int x = 0;
// int y = 0;
// printf("请输入两个操作数:>");
// scanf("%d%d", &x, &y);
// printf("%d\n", pf(x, y));
//}
//
//int main()
//{
// int input = 0;
//
// do
// {
// menu();
// printf("请选择:>");
// scanf("%d", &input);
// switch (input)
// {
// case 1:
// Calc(Add);
// //printf("请输入两个操作数:>");
// //scanf("%d%d", &x, &y);
// //printf("%d\n", Add(x, y));
// break;
// case 2:
// Calc(Sub);
// //printf("请输入两个操作数:>");
// //scanf("%d%d", &x, &y);
// //printf("%d\n", Sub(x, y));
// break;
// case 3:
// Calc(Mul);
// //printf("请输入两个操作数:>");
// //scanf("%d%d", &x, &y);
// //printf("%d\n", Mul(x, y));
// break;
// case 4:
// Calc(Div);
// //printf("请输入两个操作数:>");
// //scanf("%d%d", &x, &y);
// //printf("%d\n", Div(x, y));
// break;
// case 0:
// printf("退出\n");
// break;
// default:
// printf("选择错误\n");
// break;
// }
// } while (input);
// return 0;
//}
//int Add(int x, int y)
//{
// return x + y;
//}
//
//
//int main()
//{
// int arr[10] = { 0 };
// int (* p)[10] = &arr;//取出数组的地址
//
// int (*pf)(int, int);//函数指针
// int (*pfArr[4])(int int);//pfArr是一个数组 - 函数指针的数组
// //pfArr是一个指向函数指针数组的指针
// int (*( * ppfArr)[4])(int int) = &pfArr;
// //ppfArr 是一个数组指针,指针指向的数组有4个元素
// //指向的数组的每个元素的类型是一个函数指针 int(*)(int,int)
//
// return 0;
//}
//回调函数
//print(char *str)
//{
// printf("hehe:%s", str);
//}
//
//void test(void(*p)(char*))
//{
// printf("test\n");
// p("bit");
//}
//int main()
//{
// test(print);
// return 0;
//}
//void BubbleSort(int arr[], int sz)
//{
// //...
//}
////qsort - 可以排序任意类型的数据
//
//int main()
//{
// //冒泡排序函数
// //冒泡排序函数只能排序整型数组
// int arr[] = { 1,3,5,7,9,2,4,6,8,0 };
// int sz = sizeof(arr) / sizeof(arr[0]);
// BubbleSort(arr, sz);
// return 0;
//}
//int Add(int x, int y)
//{
// return x + y;
//}
//int main()
//{
//指针数组
//int* arr[10];
//数组指针
//int* (* pa)[10] = &arr;
//函数指针
//int(* pAdd)(int,int) = Add;//&Add
//int sum = (* pAdd)(1, 2);
//printf("sum = %d\n", sum);
//pAdd(1, 2);
//printf("sum = %d\n", sum);
//函数指针的数组
//int(*pArr[5])(int, int)
//指向函数指针数组的指针
//int(*( *ppArr)[5])(int, int) = &pArr;
// return 0;
//}
//void bubble_sort(int arr[],int sz)
//{
// int i = 0;
// for (i = 0; i < sz - 1; i++)
// {
// //一趟冒泡排序
// int j = 0;
// for (j = 0; j < sz-1-i; j++)
// {
// if (arr[j] > arr[j + 1])
// {
// int tmp = arr[j];
// arr[j] = arr[j + 1];
// arr[j + 1] = tmp;
// }
// }
// }
//}
struct Stu
{
char name[20];
int age;
};
//int cmp_int(const void* e1, const void* e2)
//{
// //比较两个整型值的
// return *(int*)e1 - *(int*)e2;
//}
//
//int cmp_float(const void* e1, const void* e2)
//{
// return (int)( * (float*)e1 - *(float*)e2);
//}
//
//int cmp_stu_by_age(const void* e1, const void* e2)
//{
// return ((struct Stu*)e1)->age - ((struct Stu*)e2)->age;
//}
int cmp_stu_by_name(const void* e1, const void* e2)
{
//比较名字就是比较字符串
//字符串比较不能直接用><=来比较,应该用strcmp函数
return strcmp(((struct Stu*)e1)->name,((struct Stu*)e2)->name);
}
//
//int main()
//{
// int arr[10] = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
// int sz = sizeof(arr) / sizeof(arr[0]);
// //struct Stu s[3] = {{"zhangsan",20},{"lisi",30},{"wangwu",10}};
// //float f[] = { 9.0,8.0,7.0,6.0,5.0,4.0 };
// qsort(arr,sz,sizeof(arr[0]),cmp_int);
//
//
//
// //bubble_sort(arr, sz);
//
// //bubble_sort(f, sz);
// int i = 0;
// for (i = 0; i < sz; i++)
// {
// printf("%d ", arr[i]);
// }
// return 0;
//}
//void test1()
//{
// int arr[10] = { 9,8,7,6,5,4,3,2,1,0 };
// int sz = sizeof(arr) / sizeof(arr[0]);
// qsort(arr, sz, sizeof(arr[0]), cmp_int);
// int i = 0;
// for (i = 0; i < sz; i++)
// {
// printf("%d ", arr[i]);
// }
//}
//
//void test2()
//{
// float f[] = { 9.0,8.0,7.0,6.0,5.0,4.0 };
// int sz = sizeof(f) / sizeof(f[0]);
// qsort(f, sz, sizeof(f[0]), cmp_float);
// int j = 0;
// for (j = 0; j < sz; j++)
// {
// printf("%f ", f[j]);
// }
//}
//
//void test3()
//{
// struct Stu s[3] = {{"zhangsan",20},{"lisi",30},{"wangwu",10}};
// int sz = sizeof(s) / sizeof(s[0]);
// qsort(s, sz, sizeof(s[0]),cmp_stu_by_age);
//}
void test4()
{
struct Stu s[3] = { {"zhangsan",20},{"lisi",30},{"wangwu",10} };
int sz = sizeof(s) / sizeof(s[0]);
qsort(s, sz, sizeof(s[0]), cmp_stu_by_name);
}
int main()
{
//test1();
//test2();
//test3();
test4();
}
//int main()
//{
// int a = 10;
// int* pa = &a;
// char* pc = &a;//char 和 int 不匹配
// char ch = 'w';
// void* p = &ch;
// void* p = &a;
// //void* 类型的指针 可以接收任意类型的地址
// return 0;
//}
//int main()
//{
// int a = 10;
// void* p = &a;
// p++;
// //*p = 0;
// //void* 类型的指针不能进行解引用操作
// //void* 类型的指针不能进行+-整数的操作
// return 0;
//}