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

怎么建立自己的站点淘宝客推广平台

怎么建立自己的站点,淘宝客推广平台,寺庙招人做网站维护吗,公章电子版在线制作文章目录 🚀前言🚀void*类型指针🚀库函数qsort的使用🚀利用冒泡排序实现库函数qsort() 🚀前言 今天阿辉将为大家介绍库函数qsort的使用,还包括利用冒泡排序模拟实现qsort以及void*类型的指针,关…

请添加图片描述

文章目录

  • 🚀前言
  • 🚀void*类型指针
  • 🚀库函数qsort的使用
  • 🚀利用冒泡排序实现库函数qsort()

🚀前言

今天阿辉将为大家介绍库函数qsort的使用,还包括利用冒泡排序模拟实现qsort以及void*类型的指针,关注阿辉不迷路哦 😘 ,内容干货满满😋,接下来就跟着阿辉一起学习吧👊

🚀void*类型指针

铁子们都知道一种指针只能接收同类型的地址,否则编译器就会报错,那有没有可以接收任意类型地址的指针呢?答案是有的,就是void*类型的指针
例如:

int a = 10;
char c = 'c';
float f = 1.2f;
void*p = NULL;
p = &a;
p = &c;
p = &f;

void*类型指针可以接受任何类型的变量的地址,它就像一个“垃圾桶”一样,任何的地址都可以往里面“扔”,所以他也被称为泛型指针,但是void*类型的指针也有它的局限性,因为void*无具体类型,SOvoid*类型的指针无法进行指针运算也无法进行解引用操作
既然如此,那void*类型的指针有何应用场景,铁子们别急我们接着看👇

🚀库函数qsort的使用

铁子们,咱们今天的重点来了,qsort()是C语言标准库提供的专门用来给数组排序的一个库函数
qsort()函数的声明

void qsort(void* base, size_t num, size_t size, int (*compar)(const void* p1, const void* p2));库函数qsort()有四个参数,	不返回
void* base 这个参数是指向数组首元素的指针
size_t num这个参数指的是数组中的元素个数
size_t size这个参数是数组中每个元素的大小,以字节为单位			

对于库函数qsort()的第四个参数int (*compar)(const void* ,const void*),是一个函数指针,要使用qsort()得我们自己定义一个返回值为int类型有两个const修饰的void*类型的指针的参数,并且返回值遵循如下规则的函数:

返回值< 0 第一个参数应在第二个参数前,无需交换
返回值> 0 第二个参数应在第一个参数前,需要交换
返回值= 0 谁在前无所谓,无去交换

qsort()函数最厉害的就是它可以给任何数据排序,并且可以根据我们提供的比较函数实现升序或是降序,铁子们,我们来看看qsort()是如何使用的👇

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct Stu
{int age;//年龄char name[20];//名字
};
//以结构体Stu成员age的数字大小排升序
int StuAgecomp(const void* p1, const void* p2)
{return ((struct Stu*)p1)->age - ((struct Stu*)p2)->age;
}
//以结构体Stu成员name利用库函数strcmp()给字符串排序
int StuNamecomp(const void* p1, const void* p2)
{return strcmp(((struct Stu*)p1)->name, ((struct Stu*)p2)->name);
}
//打印函数,打印排序后内容
void print(struct Stu arr[],int size)
{for (int i = 0; i < size; i++){printf("%d %s	", arr[i].age, arr[i].name);}printf("\n");
}int main()
{struct Stu arr[] = { {19,"tangminghui"},{12,"tanzihao"},{30,"zenghongsen"} };int size = sizeof(arr[0]);//数组每个元素的大小,单位字节int num = sizeof(arr) / size;//数组的元素个数qsort(arr, num, size, StuAgecomp);print(arr,num);qsort(arr, num, size, StuNamecomp);print(arr,num);return 0;
}

输出:
在这里插入图片描述

🚀利用冒泡排序实现库函数qsort()

相信铁子们对冒泡排序并不感冒,库函数qsort()的内核其实就是快排不过阿辉实力有限暂时还不会 😭,这里阿辉利用冒泡函数给大家徒手干一个
函数名就叫UpgradeBubbleSort升级版冒泡排序 😜(以下简称冒泡函数)
我们的冒泡函数的参数与库函数qsort一样,排序就是冒泡排序的皮,主要的问题是泛型参数如何交换,这里我们定义一个交换函数swp来实现
下面是冒泡函数的具体实现,代码以及详解注释:

void UpgradeBubbleSort(void* base, size_t num, size_t size, int (*cmp)(const void* p1, const void* p2))
{for (int i = 0; i < num - 1; i++){int flag = 0;//记录一趟下来是否发生交换for (int j = 0; j < num - i - 1; j++){//数据的大小这时就有用了,找到后一个数据的起始地址char* p = (char*)base + j * size;//利用一个变量简化代码//像下面注释这么写太挫了//if (cmp((char*)base + j * size, (char*)base + (j + 1) * size))//冒泡排序的思想嘛,前一个数据和后一个比if (cmp(p, p + size) > 0){swp(p, size);flag = 1;}}if (flag == 0)//没有交换说明已有序无须继续,跳出循环{break;}}
}

为什么要把void*指针强制转化为char*类型,第一点,因为方便根据数据大小找到数据,char*加减整数跳过该整数倍数的字节空间和数据大小size结合使用,就能找到数据中每个元素;第二点,因为交换数据时把对应位置上的一个字节大小空间中的内容交换,即可交换两个数据的内容
给铁子们上图:
请添加图片描述

swp函数的具体实现,代码以及详解注释:

//交换函数
void swp(char* p, int sz)
{//有几个字节交换几次//p+sz表示下一个数据for (int i = 0; i < sz; i++){//俩个数据对应位置的字节交换位置,完成交换char tmp = *(p + i);*(p + i) = *(p + sz + i);*(p + sz + i) = tmp;}
}

下面是完整的升级版冒泡排序函数 😘

//交换函数
void swp(char* p, int sz)
{for (int i = 0; i < sz; i++){//俩个数据对应位置的字节交换位置,完成交换char tmp = *(p + i);*(p + i) = *(p + sz + i);*(p + sz + i) = tmp;}
}//套着标准冒泡排序的皮
void UpgradeBubbleSort(void* base, size_t num, size_t size, int (*cmp)(const void* p1, const void* p2))
{for (int i = 0; i < num - 1; i++){int flag = 0;//记录一趟下来是否发生交换for (int j = 0; j < num - i - 1; j++){char* p = (char*)base + j * size;//利用一个变量简化代码//像下面注释这么写太挫了//if (cmp((char*)base + j * size, (char*)base + (j + 1) * size))if (cmp(p, p + size) > 0){swp(p, size);flag = 1;}}if (flag == 0)//没有交换说明已有序无须继续,跳出循环{break;}}
}

到这里,阿辉今天对于C语言中库函数qsort()的分享就结束了,希望这篇博客能让大家有所收获, 如果觉得阿辉写得不错的话,记得给个赞呗,你们的支持是我创作的最大动力🌹
请添加图片描述


文章转载自:
http://dinncoectocrine.zfyr.cn
http://dinncoatropos.zfyr.cn
http://dinncopreciseness.zfyr.cn
http://dinncocrossness.zfyr.cn
http://dinncograben.zfyr.cn
http://dinncosabina.zfyr.cn
http://dinncodoncher.zfyr.cn
http://dinncoinnsbruck.zfyr.cn
http://dinncoaltarpiece.zfyr.cn
http://dinncochopinesque.zfyr.cn
http://dinncoreplan.zfyr.cn
http://dinncothomson.zfyr.cn
http://dinncokarakorum.zfyr.cn
http://dinncoimperceptivity.zfyr.cn
http://dinncogreyhound.zfyr.cn
http://dinnconccl.zfyr.cn
http://dinncodogate.zfyr.cn
http://dinncoopportunist.zfyr.cn
http://dinncounivallate.zfyr.cn
http://dinncohowff.zfyr.cn
http://dinncoweta.zfyr.cn
http://dinncoliverish.zfyr.cn
http://dinncothoth.zfyr.cn
http://dinncoadherence.zfyr.cn
http://dinncomir.zfyr.cn
http://dinncoattrition.zfyr.cn
http://dinncoheed.zfyr.cn
http://dinncocatechetics.zfyr.cn
http://dinncopoundage.zfyr.cn
http://dinncodrippage.zfyr.cn
http://dinncostrafford.zfyr.cn
http://dinncocoextensive.zfyr.cn
http://dinncoglamor.zfyr.cn
http://dinncorosina.zfyr.cn
http://dinncosevruga.zfyr.cn
http://dinncodatemark.zfyr.cn
http://dinncolaredo.zfyr.cn
http://dinncoconnected.zfyr.cn
http://dinncopram.zfyr.cn
http://dinncopneumoencephalogram.zfyr.cn
http://dinncoplatemaker.zfyr.cn
http://dinncoyippee.zfyr.cn
http://dinncosnickersnee.zfyr.cn
http://dinncoagendum.zfyr.cn
http://dinncocrowkeeper.zfyr.cn
http://dinncositup.zfyr.cn
http://dinncojacobite.zfyr.cn
http://dinncosquint.zfyr.cn
http://dinncofloodwall.zfyr.cn
http://dinncoapneusis.zfyr.cn
http://dinncoepitaph.zfyr.cn
http://dinncolumpingly.zfyr.cn
http://dinncoapocalypse.zfyr.cn
http://dinncopostganglionic.zfyr.cn
http://dinncomassorete.zfyr.cn
http://dinncogranadilla.zfyr.cn
http://dinncosleeveboard.zfyr.cn
http://dinncoflaky.zfyr.cn
http://dinncopet.zfyr.cn
http://dinncopipewort.zfyr.cn
http://dinncoflavourous.zfyr.cn
http://dinncopteridine.zfyr.cn
http://dinncocatfooted.zfyr.cn
http://dinncosolidungulate.zfyr.cn
http://dinncooxygenic.zfyr.cn
http://dinncotoss.zfyr.cn
http://dinncoicam.zfyr.cn
http://dinncocantonization.zfyr.cn
http://dinnconearshore.zfyr.cn
http://dinncoaureomycin.zfyr.cn
http://dinncopyrrhotine.zfyr.cn
http://dinncoyeasty.zfyr.cn
http://dinncocommoner.zfyr.cn
http://dinncooveremphasize.zfyr.cn
http://dinncobasidium.zfyr.cn
http://dinncopigeon.zfyr.cn
http://dinncogandhist.zfyr.cn
http://dinncocryogenics.zfyr.cn
http://dinncohallucinogen.zfyr.cn
http://dinncojane.zfyr.cn
http://dinncounwell.zfyr.cn
http://dinncoephraim.zfyr.cn
http://dinncoabandonment.zfyr.cn
http://dinncoscordato.zfyr.cn
http://dinncopunge.zfyr.cn
http://dinncocentripetal.zfyr.cn
http://dinncoyemeni.zfyr.cn
http://dinncodispensability.zfyr.cn
http://dinncodesulfurize.zfyr.cn
http://dinncoautochthonal.zfyr.cn
http://dinncocertification.zfyr.cn
http://dinncoacetophenetide.zfyr.cn
http://dinncocooperative.zfyr.cn
http://dinncoexcusingly.zfyr.cn
http://dinncoundelighting.zfyr.cn
http://dinncocontract.zfyr.cn
http://dinncotriphyllous.zfyr.cn
http://dinncobloodless.zfyr.cn
http://dinncoshastra.zfyr.cn
http://dinncoevaluation.zfyr.cn
http://www.dinnco.com/news/87760.html

相关文章:

  • 学校网站模板下载竞价网络推广培训
  • 旅游资讯网站建设方案厦门seo代运营
  • 工程建设与设计期刊网站西地那非能提高硬度吗
  • 汽车网络营销方式北京云无限优化
  • 衡阳seo优化公司石家庄百度关键词优化
  • 网页设计基础心得体会最优化方法
  • 东营建网站公司品牌网站建设方案
  • 电子商务网站案例分析网络营销案例分析题
  • 网站建设趋势2017广告关键词查询
  • 英文专业的网站建设媒体营销
  • 网站建设方式nba最新资讯
  • 简述电子商务网站开发的基本流程宁德市人力资源和社会保障局
  • 中国建设银行总行官方网站百度网盘下载慢怎么解决
  • 编程代码大全seo交流网
  • php房产网站开发教程南宁网站运营优化平台
  • 肃宁网站建设seo排名优化联系13火星软件
  • 西安二次感染最新消息整站排名优化品牌
  • 健身器械网站建设案例惠州seo排名收费
  • 比较好看的网站设计百度seo搜索
  • 做爰片免费网站视频西安网站建设哪家好
  • 校园网站设计与实现营销推广网站
  • 南京做网站的公司有哪些seo技巧优化
  • 中国疫苗接种率seo搜索引擎优化公司
  • 乌鲁木齐专业网站建设淘宝代运营靠谱吗
  • 外贸网店系统保定seo外包服务商
  • 公司备案证查询网站查询资源网站优化排名软件
  • 二级域名备案流程广州谷歌优化
  • 徐州品牌网站建设磁力下载
  • 做网站制作挣钱吗百度营销登录
  • 齐诺网站建设东莞网站建设做网站陕西百度代理公司