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

长沙整站优化充电网站建设方案

长沙整站优化,充电网站建设方案,常宁市城乡和住房建设网站,哈尔滨城乡建设局网站首页文章目录 前言一、回调函数是什么二、回调函数的使用1.使用标准库中的qsort函数2.利用qsort函数对结构体数组进行排序 三、实现qsort函数总结 先记录一下访问量突破2000啦,谢谢大家支持!!! 这里是上期指针进阶链接,方便…

文章目录

  • 前言
  • 一、回调函数是什么
  • 二、回调函数的使用
    • 1.使用标准库中的qsort函数
    • 2.利用qsort函数对结构体数组进行排序
  • 三、实现qsort函数
  • 总结


在这里插入图片描述
先记录一下访问量突破2000啦,谢谢大家支持!!!
这里是上期指针进阶链接,方便大家查看:添加链接描述

前言

大家好呀,今天分享一下上期指针进阶中剩余的内容——回调函数,这个很重要滴,让我们一起来学会学懂他吧!!!


一、回调函数是什么

标准概念:
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个
函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数
的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进
行响应。

简单来说就是:在另一个函数中利用函数指针调用的函数叫做回调函数

二、回调函数的使用

1.使用标准库中的qsort函数

qsort函数不仅可以排序整型数组,还可以排序结构体等数据类型

代码如下:

#include <stdio.h>
//qosrt函数的使用者得实现一个比较函数
int int_cmp(const void * p1, const void * p2)
{return (*( int *)p1 - *(int *) p2);
}//这里必须有使用者根据自己的排序依据自己写的比较函数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);//qsort的第一个参数是排序数组的首元素地址//第二个参数是排序的长度//第三个参数是每个元素的大小//第四参数是使用者自己写的排序依据函数的地址(这里就是使用回调函数)for (i = 0; i< sizeof(arr) / sizeof(arr[0]); i++){printf( "%d ", arr[i]);}printf("\n");return 0;
}

整型数组排序的运行结果展示:
在这里插入图片描述

2.利用qsort函数对结构体数组进行排序

先看代码如下:

#include<stdio.h>
#inlcude<string.h>
struct stu {int age;char name[20];double score;
};
//依据年龄大小排序的比较函数
int compar_by_age(const void* e1, const void* e2)
{return ((struct stu*)e1)->age - ((struct stu*)e2)->age;
}
//依据名字排序的比较函数
int compar_by_name(const void* e1, const void* e2)
{return strcmp(((struct stu*)e1)->name, ((struct stu*)e2)->name);
}
int main()
{
//这是定义一个结构体类型的数组struct stu S[3] = { {21,"FRH",100},{19,"MSY",90},{18,"LZY",85} };int Ssz = sizeof(S) / sizeof(S[0]);qsort(S, Ssz, sizeof(S[0]), compar_by_age);qsort(S, Ssz, sizeof(S[0]), compar_by_name);return 0;
}

排序前后结果对比:
这是排序前结构体数组的顺序:
在这里插入图片描述
这是按照年龄排序后的顺序:
在这里插入图片描述
这是按照姓名排序后的顺序:
在这里插入图片描述

三、实现qsort函数

我们先来看一下qsort函数在标准库中的模样:
在这里插入图片描述
他没有返回值,四个参数分别是:
1、qsort的第一个参数是排序数组的首元素地址
2、第二个参数是排序的长度
3、第三个参数是每个元素的大小
4、第四参数是使用者自己写的排序依据函数的地址(这里就是使用回调函数)

作者是依据冒泡排序实现的qosrt函数,我们之间上代码:
#include<stdio.h>
#inlcude<string.h>
//依据名字排序的比较函数
int compar_by_name(const void* e1, const void* e2)
{return strcmp(((struct stu*)e1)->name, ((struct stu*)e2)->name);
}
//依据整型大小排序的比较函数
int int_cmp(const void * p1, const void * p2)
{//这里都会将接收到的地址转换为所需要比较的类型return (*( int *)p1 - *(int *) p2);
}//这里排序中交换两个元素的交换函数
void Swap(char* x, char* y,int size)
{
//利用char* 接收需要交换的元素,可以保证对其每个字节进行交换从而实现整体全部字节的交换
//size就是该元素所占字节的大小,决定每次交换循环几次int i = 0;for (i = 0; i < size; i++){char temp = *x;*x = *y;*y = temp;x++;y++;}
}void Bubble_Sort(void* base, size_t num, size_t size,int (*compar)(const void*, const void*))
{int i = 0;for (i = 0; i < num - 1; i++){int j = 0;for (j = 0; j < num - 1 - i; j++){//为什么要将首元素地址转换为char* 类型呢?//因为:这样可以保证任何类型数组在排序比较时能够访问到其中的每一个元素//这个设计是真的巧妙if (compar(((char*)base + j * size), ((char*)base + (j+1)*size))>0){Swap(((char*)base + j * size), ((char*)base + (j+1)*size), size);}}}
}

对其进行测试:

int main()
{int arr[10] = { 9,8,7,6,5,4,3,2,1,0 };struct stu S[3] = { {21,"FRH",100},{19,"MSY",90},{18,"LZY",85} };int Ssz = sizeof(S) / sizeof(S[0]);int sz = sizeof(arr) / sizeof(arr[0]);Bubble_Sort(arr,sz,sizeof(arr[0]),compar_by_int);Print(arr, sz);Bubble_Sort(S, Ssz, sizeof(S[0]), compar_by_age);Bubble_Sort(S, Ssz, sizeof(S[0]), compar_by_name);return 0;
}

可以得到,排序结果和上面调用标注库中qsort函数的结果是相同的
在这里插入图片描述

总结

关于回调函数的分享就到这里啦,希望qsort函数可以帮助到大家,博主感觉他真的是很有用,以后会尽量使用到他的,希望本篇文章可以帮助到大家,谢谢大家阅读!!!

http://www.yayakq.cn/news/118491/

相关文章:

  • 网站优秀设计方案用net语言做网站平台好不好
  • 临泉县建设局网站制作一个网站一般先要明确
  • 网站建设与管理多选题企业网站推广技巧
  • 穿衣搭配的网站如何做阿里云盘资源搜索引擎
  • 网站服务器大小小程序模板多少钱一套
  • 四川网站建设scyiyou福建省建设工程质量安全网站
  • 东莞东城做网站公司免费网站论坛
  • 网站上门备案广西建设协会网站首页
  • 代理商加盟网站自己做博客网站和百家号的区别
  • 南昌互联网网站开发优质手机网站建设企业
  • 域名备案 网站备案如何用wordpress做产品详情页
  • 生产做网站表带的制造厂家网络设计与实施课程设计
  • 高端网站建设模板全网营销案例
  • 大连六兄弟网站建设网站开发怎么根据设计稿的尺寸算图片高度
  • 做网站费用怎么记分录做网站 聊城
  • 水果行业为什么做网站怎么做 niche网站
  • 搭建企业网站的步骤百度搜索关键词推广
  • 厦门专业网站推广建站信誉好的常州做网站
  • 用word做网站功能结构图七米网站开发
  • 小企业做网站有用吗中山做网站推广公司
  • 成立网站的意义制作网页用什么布局
  • 小企业网站建设方案搭建网站都需要什么
  • 福州网站建设网络公司排名wordpress4.4.1下载
  • 网站做桌面应用 iOS建立网站的教学书籍
  • 企业如何找网络公司做网站公司网站建设方案详细
  • 百度小程序跟做网站网页制作特效代码大全
  • 毕业设计做网站答辩会问什么如何制作假网页
  • dedecms 百度网站地图saas建站
  • 大伙房水库输水工程建设局网站本地wordpress打开慢
  • 网站域名所有权查询wordpress 代码生成