旅游网站建设现状,qq浏览器网页视频怎么下载,青岛做网站皆赴青岛博采,个人怎么注册公司都需要什么手续一.函数指针数组
定义#xff1a;函数指针放进数组中#xff0c;就叫函数指针数组#xff0c;准确的说#xff0c;将一个函数的地址存到⼀个数组中 那这个数组就叫函数指针数组。 int (*pi[5])(int);
解读#xff1a;pi先和[]结合#xff0c;因此是数组#xff0c;加i…一.函数指针数组
定义函数指针放进数组中就叫函数指针数组准确的说将一个函数的地址存到⼀个数组中 那这个数组就叫函数指针数组。 int (*pi[5])(int);
解读pi先和[]结合因此是数组加int * int)表示其是函数指针
重在理解
例一
实现计算器转移表
法一不用函数指针数组
实现加减乘除取余左移右移
#define _CRT_SECURE_NO_WARNINGS 1
#include stdio.h
#include string.h
void Menu()
{printf(***************************\n);printf(***** 0.quit ********\n);printf(***** 1.Add ********\n);printf(***** 2.Sub ********\n);printf(***** 3.Mul ********\n);printf(***** 4.Div ********\n);printf(***** 5.Mod ********\n);printf(***** 6.Lsh ********\n);printf(***** 7.Rsh ********\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 Mod(int x, int y)
{return x % y;
}
int Lsh(int x, int y)
{return x y;
}
int Rsh(int x, int y)
{return x y;
}
int main()
{Menu();int x 0;int y 0;int input 0;printf(请输入:\n);scanf(%d, input);int ret 0;do{switch (input){case 0:{printf(退出欢迎下次使用\n);break;}case 1:{printf(请输入:\n);scanf(%d %d, x, y);printf(%d\n, Add(x, y));break;}case 2:{printf(请输入:\n);scanf(%d %d, x, y);printf(%d\n, Sub(x, y));break;}case 3:{printf(请输入:\n);scanf(%d %d, x, y);printf(%d\n, Mul(x, y));break;}case 4:{printf(请输入:\n);scanf(%d %d, x, y);printf(%d\n, Div(x, y));break;}case 5:{printf(请输入:\n);scanf(%d %d, x, y);printf(%d\n, Mod(x, y));break;}case 6:{printf(请输入:\n);scanf(%d %d, x, y);printf(%d\n, Lsh(x, y));break;}case 7:{printf(请输入:\n);scanf(%d %d, x, y);printf(%d\n, Rsh(x, y));break;}}} while (input);return 0;
}
法二利用函数指针数组
#define _CRT_SECURE_NO_WARNINGS 1
#include stdio.h
#include string.h
void Menu()
{printf(***************************\n);printf(***** 0.quit ********\n);printf(***** 1.Add ********\n);printf(***** 2.Sub ********\n);printf(***** 3.Mul ********\n);printf(***** 4.Div ********\n);printf(***** 5.Mod ********\n);printf(***** 6.Lsh ********\n);printf(***** 7.Rsh ********\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 Mod(int x, int y)
{return x % y;
}
int Lsh(int x, int y)
{return x y;
}
int Rsh(int x, int y)
{return x y;
}
int main()
{Menu();int x 0;int y 0;int input 0;int (*pi[8])(int x, int y) { 0,Add ,Sub,Mul,Div,Mod,Lsh,Rsh};printf(请输入:\n);scanf(%d, input);int ret 0;if (0 input){printf(退出欢迎下次使用\n);}if (1 input input 8){printf(请输入:\n);scanf(%d %d, x, y);printf(%d\n, (*pi[input])(x, y));}return 0;
}
结果 二.回调函数. 把函数的指针地址作为参数传递给另⼀个函数当这个指针被⽤来调⽤其所指向的函数时被调⽤的函数就是回调函数。回调函数不是由该函数的实现⽅直接调⽤⽽是在特定的事件或条件发⽣时由另外的⼀⽅调⽤的⽤于对该事件或条件进⾏响应.本质上回调函数就是⼀个通过函数指针调⽤的函数。 对例题一
我们通过回调函数来实现它
代码
#define _CRT_SECURE_NO_WARNINGS 1
#include stdio.h
#include string.h
void Menu()
{printf(***************************\n);printf(***** 0.quit ********\n);printf(***** 1.Add ********\n);printf(***** 2.Sub ********\n);printf(***** 3.Mul ********\n);printf(***** 4.Div ********\n);printf(***** 5.Mod ********\n);printf(***** 6.Lsh ********\n);printf(***** 7.Rsh ********\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 Mod(int x, int y)
{return x % y;
}
int Lsh(int x, int y)
{return x y;
}
int Rsh(int x, int y)
{return x y;
}
void cala(int(*pi)(int , int ))
{int x 0;int y 0;printf(请输入:\n);scanf(%d %d, x, y);printf(%d\n, pi(x, y) );
}
int main()
{Menu();int x 0;int y 0;int input 0;printf(请输入:\n);scanf(%d, input);do{switch (input){case 0:{printf(退出欢迎下次使用\n);break;}case 1:{cala(Add);break;}case 2:{cala(Sub);break;}case 3:{cala(Mul);break;}case 4:{cala(Div);break;}case 5:{cala(Mod);break;}case 6:{cala(Lsh);break;}case 7:{cala(Rsh);break;}}} while (input);return 0;
} 三.sqort函数 1.头文件为#include stdlib.h
2.里面有四个形参表里介绍的很详细了
3.作用其可以排序各种数据类型。
我们先来实现其排序整型
#define _CRT_SECURE_NO_WARNINGS 1
#include stdio.h
#include string.h
#include stdlib.h
int compare(const void* a, const void* b)
{return (*(int*)a - *(int*)b);
}
int main()
{int arr[] { 1,3,5,7,9,0,8,6,4,2 };qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof(arr[0]),compare);for (int i 0; i sizeof(arr)/sizeof(arr[0]); i){printf(%d , *(arr i));}return 0;
}
结果 排序结构体
代码
#define _CRT_SECURE_NO_WARNINGS 1
#include stdio.h
#include string.h
#include stdlib.h
struct stduent
{char name[20];int age;double score;};
int compare1(const void* a, const void* b)
{return strcmp(((struct stduent*)a)-name, ((struct stduent*)b)-name);
}
int compare2(const void* a, const void* b)
{return (*(int*)a-*(int*)b);
}
int compare3(const void* a, const void* b)
{return (*(int*)a - *(int*)b);
}
void test1()
{struct stduent arr1[] {{zhangsan,18,90.5},{lisi,17,91.7},{wangwu,20,100.0}};qsort(arr1, sizeof(arr1) / sizeof(arr1[0]), sizeof(arr1[0]), compare1);//比名字for (int i 0; i 3; i){printf(%-10s %-5d %8f\n, arr1[i].name, arr1[i].age, arr1[i].score);}printf(结束\n);
}
void test2()
{struct stduent arr1[] { {zhangsan,18,90.5},{lisi,17,91.7},{wangwu,20,100.0} };qsort(arr1, sizeof(arr1) / sizeof(arr1[0]), sizeof(arr1[0]), compare2);//比年龄for (int i 0; i 3; i){printf(%-10s %-5d %8f\n, arr1[i].name, arr1[i].age, arr1[i].score);}printf(结束\n);
}
void test3()
{struct stduent arr1[] { {zhangsan,18,90.5},{lisi,17,91.7},{wangwu,20,100.0} };qsort(arr1, sizeof(arr1) / sizeof(arr1[0]), sizeof(arr1[0]), compare1);//比成绩for (int i 0; i 3; i){printf(%-10s %-5d %8f\n, arr1[i].name, arr1[i].age, arr1[i].score);}printf(结束\n);}
int main()
{test1();test2();test3();return 0;
} 结果 实现sqort函数
#define _CRT_SECURE_NO_WARNINGS 1#include stdio.hint compare(const void* a, const void* b){return (*((int*)a) - *((int*)b));}void swap(const void* x, const void* y, int size){for (int i 0; i size; i){char temp *((char*)xi);*((char*)x i) *((char*)y i);*((char*)y i) temp;}}void Bubble(void* arr, int count, int b, int compare(void*, void*)){for (int i 0; i count - 1; i){for (int j 0; j count - 1 - i; j){if (compare((char*)arr j * b, (char*)arr (j 1) * b) 0){swap((char*)arr j * b, (char*)arr (j 1) * b, b);}}}}int main(){int arr[10] { 0 };int sz sizeof(arr) / sizeof(arr[0]);for (int i 0; i sz; i){scanf(%d,arri);}Bubble(arr, sz, sizeof(arr[0]), compare);//输出for (int i 0; i sz; i){printf(%d , *(arr i));}return 0;} 最后祝福各位学习天天进步