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

深圳微信网站建设手机网站模板下载

深圳微信网站建设,手机网站模板下载,软件推广怎么赚钱,网站建设必备目录 1. 回调函数 2. qsort相关知识(qsort可用于各种类型变量的排序) 一 回调函数 1定义/作用:把函数的指针(地址)作为参数传递给另⼀个函数,当这个指针被⽤来调⽤其所指向的函数 时,被调⽤的函数就…
目录
1. 回调函数
2. qsort相关知识(qsort可用于各种类型变量的排序)

一      回调函数

     1定义/作用:把函数的指针(地址)作为参数传递给另⼀个函数,当这个指针被⽤来调⽤其所指向的函数 时,被调⽤的函数就是回调函数。回调函数不是由该函数的实现⽅直接调⽤,⽽是在特定的事件或条件发⽣时由另外的⼀⽅调⽤的,(作用)⽤于对该事件或条件进⾏响应。

    2好处:(下面我们来看两个效果相同的代码,比较它们的简约程度)

代码1(未使用回调函数

 

 代码2(使用回调函数

 总结:这里我们使用回调函数,使得重复得部分得到了优化,代码变得更加简约。

二      qsort相关知识

1形式:

void qsort
(
     void* base//base->待排序数组中的首元素
     size_t num//待排序数组中的元素个数因为元素个数不可能是负数所以用size_t定义
     size_t size//待排序数组中的一个元素的大小因为一个元素的大小不可能是负数所以用        size_t定义
    int* (*cmp)(const void*,const void*)//函数指针--指针指向的函数,可用于比较base指向的数组中任何两个元素的大小。  因为用于比较的数组类型不同所以用void定义,又因为我们只对数据进行排序而不对数据进行改变所以用const修饰,防止数据被改写
    
)

2   qsort 使⽤举例

2.1使⽤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);for (i = 0; i< sizeof(arr) / sizeof(arr[0]); i++)
{printf( "%d ", arr[i]);
}printf("\n");
return 0;
}

2.2使⽤qsort函数排序结构数据(要指明排序类型例如描述一个人是使用结构体可能含有姓名,性别等,这时候就要指明你要排序的数据如要对姓名就要指明姓名)

按照名字来排序

 注意在按照名字进行比较时和整型有所不同,因为名字是字符串,要用strcmp函数。

按照年龄来⽐较

2.3 qsort函数的模拟【实现使⽤回调函数,模拟实现qsort(采⽤冒泡的⽅式)】。

主体框架

注意我们这里要模仿qsort函数,对其冒泡排序设置参数

排序的实现

 注意这里和冒泡排序有所不同的是在于冒泡排序只对整型排序直接比较即可,而我们这里比较两个元素的大小是通过字符类型来比较因为每个整数数组中的元素都是占4个字节,所以要用强制类型转换将其转换为char*型,而这里的width表示的是整型数组中一个元素的长度,所以这里的(char*)base + j * width,和(char*)base+(j + 1) * width表示第j个元素和第j+1个元素

函数的声明

实现交换

因为一个整型占4个字节无法进行交换,这时候我们将其划分为一个一个字节,将其强制类型转换为字符型char*,然后我们只要将两个元素的4个字节一一交换即可。

 这里的n表示的是width(4),因为一个整型占4个字节,而我们前面将其强制类型转换为字符型char*,这时候我们只要将两个元素的4个字节一一交换即可。

整体代码

#include <stdio.h>int cmp_int(const void* e1, const void* e2)
{return *(int*)e1 - *(int*)e2; 
}void swap(char* buf1, char* buf2, size_t n)
{int i = 0;for (i = 0; i < n; i++){char tmp = *buf1;*buf1 = *buf2;*buf2 = tmp;buf1++;buf2++;}
}void bubble_sort(void* base, size_t sz, size_t width, int (*cmp)(const void* e1, const void* e2))
{int i = 0;//趟数for (i = 0; i < sz - 1; i++){//一趟内部的排序int j = 0;for (j = 0; j < sz - i - 1; j++){if (cmp((char*)base + j * width, (char*)base + (j + 1) * width) > 0){//判断是否满足条件,满足则进行交换swap((char*)base + j * width, (char*)base+(j + 1) * width, width);}}}
}
void print(int arr[], int sz)
{int i = 0;for (i = 0; i < sz; i++){printf("%d ", arr[i]);}printf("\n");
}
void test()
{int arr[] = { 9,8,7,6,5,4,3,2,1,10};int sz = sizeof(arr) / sizeof(arr[0]);bubble_sort(arr, sz, sizeof(arr[0]), cmp_int);//模仿qsort函数,对其设置参数print(arr, sz);//打印
}
int main()
{test();return 0;}

    本篇文章就到此结束,希望有所能帮到 读者更好的了解指针。

http://www.fp688.cn/news/157925.html

相关文章:

  • 如果做国外网站导购百度服务平台
  • 网站设计销售百度一下百度搜索首页
  • 河北网站建设seo优化营销制作设计最好用的免费建站平台
  • 自己做的网站怎么植入erp网站运营主要做什么
  • 东莞做网站哪个公司最好刷神马关键字排名软件
  • 诱人888网站电脑培训网上课程
  • linux 网站目录权限设置互联网广告推广好做吗
  • 深圳做网站推广哪家好做外贸怎么推广
  • 吴忠网站建设公司国内免费建站平台
  • 网站论坛模板下载网络项目发布网
  • 南宁做网站在哪了seo方案书案例
  • 诸暨城乡与建设局网站长沙推广公司
  • 怎么做阿里巴巴英文网站百度一下下载
  • 大连网站建设过程互联网项目
  • 自己做微信电影网站怎么做成都seo论坛
  • 网站建设需要准备什么推广吧
  • 免费logo在线制作设计优化师和运营区别
  • 长沙网站开发方案wordpress建站
  • 陕西建设技术学院网站响应式网站建设
  • 网站内容页怎么设计网页制作的软件有哪些
  • 帝国 cms 网站关键字优秀网页设计公司
  • 新乡哪有做网站的产品推广策划方案
  • 搜狐快站做网站教程2345浏览器官网
  • 福州网站建设服务商免费的网站申请
  • 兰州优化官网推广潮州seo建站
  • 南京市网站开发怎样搭建网站
  • h5 建站网站 移动端电脑学校培训
  • 做网站的设计流程seo推广是什么意思呢
  • 网站建设快照优化十大新媒体平台有哪些
  • 温州网站建设 温州网站制作一个新手怎么做电商