当前位置: 首页 > news >正文

网站设计流程图免费永久个人网站

网站设计流程图,免费永久个人网站,关于网站建设公司大全,河南省建设厅网站资质平移办法文章目录 ✈ 指向函数指针数组的指针#x1f4cc;指向函数指针数组的指针的定义#x1f4cc;指向函数指针数组的数组指针的使用 ✈回调函数#x1f4cc; 回调函数的定义#x1f4cc; 回调函数的使用 ✈qsort函数#x1f4cc; qsort函数的作用#x1f4cc;qsort函数的定义… 文章目录 ✈ 指向函数指针数组的指针指向函数指针数组的指针的定义指向函数指针数组的数组指针的使用 ✈回调函数 回调函数的定义 回调函数的使用 ✈qsort函数 qsort函数的作用qsort函数的定义qsort函数的头文件1.qsort函数排序整型数组比较函数compare主函数 2.qsort函数排列结构体数据【1】排列结构体中的整型类型比较函数主函数以及结构体 【2】排列结构体中的字符串类型比较函数compare主函数 【3】 排列结构体中的浮点型数据比较函数compare主函数 3.qsort函数排列字符数组类型数据比较函数compare主函数 ✈使用回调函数模拟实现qsort采用冒泡的方式冒泡排序传送门在此[冒泡排序](https://blog.csdn.net/yyqzjw/article/details/131909947?spm1001.2014.3001.5501)模拟实现qsort排整型数组利用冒泡排序方式 总结 ✈ 指向函数指针数组的指针 指向函数指针数组的指针是一个 指针 指针指向一个 数组 数组的元素都是 函数指针 ; 如何定义 指向函数指针数组的指针的定义 我们可以先定义五个函数 int add(int a, int b) {return a b;} int sub(int a, int b) {return a - b; } int mul(int a, int b) {return a*b; } int div(int a, int b) {return a / b; }分别计算两个变量的加减乘除然后定义一个函数指针数组用来存放上面4个函数的地址 int(*p[5])(int x, int y) { 0, add, sub, mul, div }; 空出来一个是为了让加减乘除函数与下标对应上 int (*(*pp)[5])(int x,int y) p;这个是指向函数指针数组的数组指针,ta指向的函数指针数组的类型是去掉*pp int (*()[5])(int x,int y)这个类型说明数组指针指向的是数组长度是5每个元素都是地址每个元素的类型是 int ()(int x,int y)画图说明一下关系 指向函数指针数组的数组指针的使用 怎么通过这个数组指针pp去使用加减乘除这几个函数呢代码如下 int add(int a, int b) {return a b;} int sub(int a, int b) {return a - b; } int mul(int a, int b) {return a * b; } int div(int a, int b) {return a / b; } int main() {int(*p[5])(int x, int y) { 0, add, sub, mul, div };int (*(*pp)[5])(int x, int y) p;int ret (*(*pp 1))(3, 4);printf(%d, ret); }在这块解释一下子 (*(*pp 1))(3, 4)pp存放的是p[]整个数组的地址*pp相当于拿到这个数组也相当于拿到数组的数组名相当于数组首元素地址*pp1为第二个元素地址 如果在对其解引用得到的是 *pp1这个就是数组第二个元素的内容也就是说add的地址因为add和add打印的结果一样使用该函数计算34 add(3,4)等价 ((*pp 1))(3, 4) ✈回调函数 回调函数的定义 回调函数pp()就是一个通过函数指针void(*p)()调用的函数。如果你把函数的指针地址作为参数传递给另一个函数print(pp);当这个指针被用来调用其所指向的函数时pp()我们就说这是回调函数。回调函数不是由该函数的实现方直接调用而是在if (1)特定的事件或条件发生时由另外的一方调用的用于对该事件或 条件进行响应。 回调函数的使用 void pp() {printf(hahahahaha\n); } void print(void(*p)()) {if (1){p();} } int main() { print(pp);return 0; }根据回调函数的定义可知pp()函数就是回调函数。 ✈qsort函数 qsort函数的作用 我们之前学过的冒泡排序可以将一个整型数组排好序如果让我们去排序浮点型字符型结构体型我们应该怎么办呢 qsort函数可以解决这个问题万物皆可排。那谁谁你怎么插队呢快去排队 qsort函数的定义 在msdn上找到定义我们可以将定义复制过来 void qsort( void *base,size_t num,size_t width,int (__cdecl *compare )(const void *elem1, const void *elem2 ) );什么英格力士 下面有请过英语四级的小张同学给翻译翻译哈哈哈哈哈 咳咳我来了 1.base指针指向的是要排序数组的首地址因为不清楚要排序的是什么类型的数据这里用void 可以接收任何类型的指针 2.num是该数组的元素个数 3.width是每个元素的字节大小 4.自定义比较函数compare 第四个位置是一个函数指针来接收一个比较函数的地址参数用两个指针接收要比较两个元素的地址因为不知道比较什么类型的数据就用void的指针接收,比较函数是根据你自己要排列的数据类型自己定义的。 第一个元素大于第二个元素返回大于0的小于第二个元素返回小于0等于返回0 qsort函数的头文件 1.qsort函数排序整型数组 比较函数compare int int_cmp(const void* p1, const void* p2) {return (*(int*)p1 - *(int*)p2); }这里要排整型数据将void的指针强制类型转化为int,一次可以访问4个字节 解引用也可以得到一个整型数据 主函数 int main() {int arr[] { 1, 3, 5, 7, 9, 2, 4, 6, 8, 0 };int i 0;qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof(int), int_cmp);for (i 0; i sizeof(arr) / sizeof(arr[0]); i){printf(%d , arr[i]);}printf(\n);return 0; }注意如果要排成降序只需要将比较函数中的 int int_cmp(const void* p1, const void* p2) { return ((int)p2 - (int)p1); } 2.qsort函数排列结构体数据 【1】排列结构体中的整型类型 比较函数 int int_cmp_age(const void* p1, const void* p2)//按年龄比较 {return ((struct Stu*)p1)-age - ((struct Stu*)p2)-age; }主函数以及结构体 struct Stu {char name[20];int age;float score; }; int main() {int i 0;struct Stu arr[3] {{zhangjiawang,18,100},{zhumiao,50,76},{liuliu,19,76}};int sz sizeof(arr) / sizeof(arr[0]);qsort(arr,sz, sizeof(arr[0]), int_cmp_age);for (int i 0; i 3; i){printf(%d , arr[i].age);}return 0; }运行结果 【2】排列结构体中的字符串类型 比较函数compare int int_cmp_age(const void* p1, const void* p2) {return (strcmp(((struct Stu*)p1)-name), ((struct Stu*)p2)-name); }字符串比较用strcmp函数记得添加头文件string.h 这个是strcmp函数的返回值和比较函数刚好对应上 主函数 int main() {int i 0;struct Stu arr[3] {{zhangjiawang,18,100},{zhumiao,50,76},{liuliu,19,76}};int sz sizeof(arr) / sizeof(arr[0]);qsort(arr,sz, sizeof(arr[0]), int_cmp_age);for (int i 0; i 3; i){printf(%s , arr[i].name);}return 0; } 运行结果 【3】 排列结构体中的浮点型数据 比较函数compare int int_cmp_float(const void* p1, const void* p2) {return (*(float*)p1 -*(float*)p2); }主函数 int main() {int i 0;struct Stu arr[3] {{zhangjiawang,18,100.0},{zhumiao,50,76.0},{liuliu,19,77.0}};int sz sizeof(arr) / sizeof(arr[0]);qsort(arr,sz, sizeof(arr[0]), int_cmp_float);for (int i 0; i 3; i){printf(%.1f , arr[i].score);}return 0; }运行结果 3.qsort函数排列字符数组类型数据 比较函数compare int int_cmp(const void* p1, const void* p2) {return (*(char*)p1 - *(char*)p2); }主函数 int main() {char arr[] {b,c,a,f,z,q};int i 0;qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof(char), int_cmp);for (i 0; i sizeof(arr) / sizeof(arr[0]); i){printf(%c , arr[i]);}printf(\n);return 0; }运行结果 ✈使用回调函数模拟实现qsort采用冒泡的方式 冒泡排序传送门在此冒泡排序 int main() {int arr[10] {10,9,8,7,6,5,4,3,2,1};int sz sizeof(arr) / sizeof(arr[0]);//数组长度int i;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;}}}for (i 0; i sz; i)//打印数组{printf(%d , arr[i]);} }模拟实现qsort排整型数组利用冒泡排序方式 主函数 int main() {int arr[] { 1, 3, 5, 7, 9, 2, 4, 6, 8, 0 };int i 0;bubble_qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof(int), int_cmp);for (i 0; i sizeof(arr) / sizeof(arr[0]); i){printf(%d , arr[i]);}printf(\n);return 0; }模拟qsort函数 将冒泡排序的实现copy过来然后对其修改 大概替换的思想是 void bubble_sort(void* base, int num, int width, int cmp) {int i; for (i 0; i num - 1; i) { int j 0; for (j 0; j num - 1 - i; j) { if (比较函数的返回值) {交换数组元素的函数} } } } 比较函数compare(这里因为要排的是整型数组用上面整型数组的比较函数就行)int cmp(const void* p1, const void* p2) { return ((int)p1 - (int)p2); } 现在的问题是怎么使用bubble_sort函数的参数找到要比较两个元素的地址 代码cmp((char*)basej*width),(char*)base(j1)*width)0 问题1为什么要将base地址存在char的指针中 方便访问任意类型数据因为width是一个元素的字节大小如果访问一个整型的地址width就是4char的指针4刚好跳过4个字节如果把base地址用int*接收如果width还是4的话4就跳过的不是一个元素而是4个元素相邻的元素根本就比不了大小。 如果j0的话上面传到比较函数中的就是第一个元素地址和第二个元素地址 替换后的bubble_sort void bubble_sort(void* base, int num, int width, int cmp) {int i;for (i 0; i num - 1; i){int j 0;for (j 0; j num - 1 - i; j){if (cmp((char*)base j * width), (char*)base (j 1) * width) 0){交换数组元素的函数}}}} }现在的问题是怎么交换两个地址上的元素。交换数组元素的函数void swap(char* p1, char* p2, int width) {int i 0;for (i 0; i width; i){char tmp *p1;*p1 *p2;*p2 tmp;p1;p2;} } 这里的交换函数是按字节交换的,比如说数组前两个元素13假如说内存为小端存储实现前两个元素交换 替换后的bubble_sort void bubble_sort(void* base, int num, int width, int cmp) {int i;for (i 0; i num - 1; i){int j 0;for (j 0; j num - 1 - i; j){if (cmp((char*)base j * width), (char*)base (j 1) * width) 0){swap((char*)base j * width), (char*)base (j 1) * width));}}}} }整体代码展示 #include stdio.h int cmp(const void* p1, const void* p2) {return (*(int*)p1 - *(int*)p2); } void swap(char* p1, char* p2, int width) {int i 0;for (i 0; i width; i){char tmp *p1;*p1 *p2;*p2 tmp;p1;p2;} } void bubble_sort(void* base, int num, int width, int cmp(const void* p1, const void* p2)) {int i;for (i 0; i num - 1; i){int j 0;for (j 0; j num - 1 - i; j){if (cmp((char*)base j * width, (char*)base (j 1) * width) 0){swap((char*)base j * width,(char*)base (j 1) * width,width);}}}} int main() {int arr[] { 1, 3, 5, 7, 9, 2, 4, 6, 8, 0 };int i 0;qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof(int), cmp);for (i 0; i sizeof(arr) / sizeof(arr[0]); i){printf(%d , arr[i]);}printf(\n);return 0; } 总结 希望这篇文章可以给你带来帮助如果有不对的地方或者有哪里不理解的地方请私信我谢谢大家支持下篇见以上
http://www.w-s-a.com/news/566376/

相关文章:

  • 公司网站欢迎语工作期间员工花钱做的网站
  • 新网站该如何做网站优化呢网络营销网站设计
  • 旅游门户网站模板下载做策划网站推广怎么写简历
  • 建设隔离变压器移动网站wordpress动态导航
  • 平潭建设局网站中国免费素材网
  • 虚拟主机可以做视频视频网站吗做爰全过程免费的视频网站有声音
  • 专业做家电经销的网站网络管理系统有哪几部分组成
  • 自学网站编程网站名称需要注册吗
  • 网站后台管理系统怎么添加框安徽省工程建设协会网站
  • 雨花台网站建设wordpress找回
  • 四川哪家网站推广做的好网站开发人才需求
  • 什么网站可以找手工活做一站式服务平台官网
  • 做购物网站的步骤网站核心词如何做
  • 做品牌设计网站公司网站没做301怎么做301
  • 服务流程企业网站wordpress文章的使用
  • 网站开发组合淘宝网站开发选什么类目
  • 广东手机网站建设个人电脑做网站主机
  • 健身俱乐部网站开发文档建一个网站需要什么条件
  • 买的网站模板怎么做建设行政管理部门网站
  • 怎么让百度多收录网站关键词seo深圳
  • 陕西交通建设集团网站体检个人网站设计模板田田田田田田田田
  • ae模板网站推荐安徽建筑信息平台
  • 新网站建设代理商wordpress模板商店
  • 中国十大设计素材网站wordpress发布失败
  • 江西省建设监理网站网页制作与设计是什么
  • 在招聘网站做销售怎么样网址你懂我意思正能量不用下载ios
  • 高端企业网站定制公司企业网站2000元
  • 成都网站建设:河北省建设工程质量监督网站
  • 四川省建设厅官网信息查询平台北京seo关键词优化外包
  • 网站建设响应式是什么意思wordpress弹窗打开网页