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

四川短视频seo优化网站最新的国际新闻

四川短视频seo优化网站,最新的国际新闻,建设个人网站多少钱,网站官网设计规范1.回调函数是什么? 回调函数就是一个通过函数指针调用的函数。 如果你把函数的指针(地址)作为参数传递给另⼀个函数,当这个指针被⽤来调⽤其所指向的函数时,被调⽤的函数就是回调函数。回调函数不是由该函数的实现⽅…

1.回调函数是什么?

回调函数就是一个通过函数指针调用的函数。

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

第13讲中我们写的计算机的实现的代码中,红⾊框中的代码是重复出现的,其中虽然执⾏计算的逻辑是区别的,但是输⼊输出操作是冗余的,有没有办法,简化⼀些呢?

因为红⾊框中的代码,只有调⽤函数的逻辑是有差异的,我们可以把调⽤的函数的地址以参数的形式传递过去,使⽤函数指针接收,函数指针指向什么函数就调⽤什么函数,这⾥其实使⽤的就是回调函数的功能。

(1)使用回调函数改造前

//使⽤回调函数改造前
#include <stdio.h>
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 x, y;int input = 1;int ret = 0;do{printf("******************printf(" 1:add printf(" 3:mul printf("******************printf("请选择:");scanf("%d", &input);switch (input){case 1:printf("输⼊操作数:");scanf("%d %d", &x, &y)ret = add(x, y);printf("ret = %d\n", rbreak;case 2:printf("输⼊操作数:");scanf("%d %d", &x, &y)ret = sub(x, y);printf("ret = %d\n", rbreak;case 3:printf("输⼊操作数:");scanf("%d %d", &x, &y)ret = mul(x, y);printf("ret = %d\n", rbreak;case 4:printf("输⼊操作数:");scanf("%d %d", &x, &y)ret = div(x, y);printf("ret = %d\n", rbreak;case 0:printf("退出程序\n");break;default:printf("选择错误\n");break;}} while (input);return 0;
}

(2)使用回到函数改造后

//使⽤回到函数改造后
#include <stdio.h>
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;
}
void calc(int(*pf)(int, int))
{int ret = 0;int x, y;printf("输⼊操作数:");scanf("%d %d", &x, &y);ret = pf(x, y);printf("ret = %d\n", ret);
}
int main()
{int input = 1;do{printf("******************printf(" 1:add printf(" 3:mul printf("******************printf("请选择:");scanf("%d", &input);switch (input){case 1:calc(add);break;case 2:calc(sub);break;case 3:calc(mul);break;case 4:calc(div);break;case 0:printf("退出程序\n");break;default:printf("选择错误\n");break;}} while (input);return 0;
}

2.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;
}

3. qsort函数的模拟实现

由于在前面的博客里,qsort函数的模拟实现已经讲的非常详细了,所以这里我就简单写一下源码,不懂得可以去看我前面的博客学习怎样模拟实现qsort函数,感谢理解支持

使用回调函数,模拟实现qsort(采用冒泡的方式)。
注意:这里第一次使用 void* 的指针,讲解 void* 的作用。

#include <stdio.h>
int int_cmp(const void * p1, const void * p2)
{return (*( int *)p1 - *(int *) p2);
}
void _swap(void *p1, void * p2, int size)
{int i = 0;for (i = 0; i< size; i++){char tmp = *((char *)p1 + i);*(( char *)p1 + i) = *((char *) p2 + i);*(( char *)p2 + i) = tmp;}
}
void bubble(void *base, int count , int size, int(*cmp )(void *, void *))
{int i = 0;int j = 0;for (i = 0; i< count - 1; i++){for (j = 0; j<count-i-1; j++){if (cmp ((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[] = { 1, 3, 5, 7, 9, 2, 4, 6, 8, 0 };//char *arr[] = {"aaaa","dddd","cccc","bbbb"};int i = 0;bubble(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;
}

4.sizeof和strlen的对比

4.1sizeof

在学习操作符的时候,我们学习了 sizeof sizeof 计算变量所占内存内存空间大小的单位是字节,如果操作数是类型的话,计算的是使⽤类型创建的变量所占内存空间的大小。
sizeof 只关注占⽤内存空间的大小,不在乎内存中存放什么数据。
比如:

#inculde <stdio.h>
int main()
{int a = 10;printf("%d\n", sizeof(a));printf("%d\n", sizeof a);printf("%d\n", sizeof(int));return 0;
}

4.2strlen

strlen 是C语言库函数,功能是求字符串长度。函数原型如下:

size_t strlen ( const char * str );

统计的是从 strlen 函数的参数 str 中这个地址开始向后, \0 之前字符串中字符的个数。
strlen 函数会⼀直向后找 \0 字符,直到找到为止,所以可能存在越界查找。

#include <stdio.h>
int main()
{char arr1[3] = {'a', 'b', 'c'};char arr2[] = "abc";printf("%d\n", strlen(arr1));printf("%d\n", strlen(arr2));printf("%d\n", sizeof(arr1));printf("%d\n", sizeof(arr1));return 0;
}

4.3sizeof 和 strlen的对比

sizeof

  1. sizeof是操作符
  2. sizeof计算操作数所占内存的大小,单位是字节
  3. 不关注内存中存放什么数据

strlen

  1. strlen是库函数,使⽤需要包含头文件 string.h
  2. srtlen是求字符串长度的,统计的是 \0 之前字符的隔个数
  3. 关注内存中是否有 \0 ,如果没有 \0 ,就会持续往后找,可能会越界

文章转载自:
http://dinncomediatress.ydfr.cn
http://dinncodefier.ydfr.cn
http://dinncoacerb.ydfr.cn
http://dinncoathetosis.ydfr.cn
http://dinncou.ydfr.cn
http://dinncodianetic.ydfr.cn
http://dinncohepatogenic.ydfr.cn
http://dinncoinviolable.ydfr.cn
http://dinncospeedcop.ydfr.cn
http://dinncoalvera.ydfr.cn
http://dinncomemoire.ydfr.cn
http://dinncoquartette.ydfr.cn
http://dinnconingyoite.ydfr.cn
http://dinncogrievous.ydfr.cn
http://dinncoalecto.ydfr.cn
http://dinncoinsured.ydfr.cn
http://dinncoayesha.ydfr.cn
http://dinncosocialism.ydfr.cn
http://dinncoreinforce.ydfr.cn
http://dinncohognut.ydfr.cn
http://dinncoluteotrophic.ydfr.cn
http://dinncomanioc.ydfr.cn
http://dinncobalsamic.ydfr.cn
http://dinncophp.ydfr.cn
http://dinncometric.ydfr.cn
http://dinncoserpentinize.ydfr.cn
http://dinncorebec.ydfr.cn
http://dinncofafnir.ydfr.cn
http://dinncofeeding.ydfr.cn
http://dinncoasbestine.ydfr.cn
http://dinncoharleian.ydfr.cn
http://dinncorightness.ydfr.cn
http://dinncotan.ydfr.cn
http://dinncobesought.ydfr.cn
http://dinncowampanoag.ydfr.cn
http://dinncotrashy.ydfr.cn
http://dinncopresumptuous.ydfr.cn
http://dinncoflutey.ydfr.cn
http://dinncobeldam.ydfr.cn
http://dinncorencounter.ydfr.cn
http://dinncoacerbate.ydfr.cn
http://dinncoremotion.ydfr.cn
http://dinncoschizophyte.ydfr.cn
http://dinncomephistopheles.ydfr.cn
http://dinncohypostatization.ydfr.cn
http://dinncoassessee.ydfr.cn
http://dinncofiring.ydfr.cn
http://dinncounmodulated.ydfr.cn
http://dinncotrigamy.ydfr.cn
http://dinncocalvados.ydfr.cn
http://dinncoheteroplasia.ydfr.cn
http://dinncocoke.ydfr.cn
http://dinncolancastrian.ydfr.cn
http://dinncopetuntse.ydfr.cn
http://dinncobridging.ydfr.cn
http://dinncosplutter.ydfr.cn
http://dinncophytobiology.ydfr.cn
http://dinncofire.ydfr.cn
http://dinncoallopolyploidy.ydfr.cn
http://dinncomobike.ydfr.cn
http://dinncohomogenous.ydfr.cn
http://dinncodendroclimatic.ydfr.cn
http://dinncoairwaves.ydfr.cn
http://dinncobrownware.ydfr.cn
http://dinncorightly.ydfr.cn
http://dinncovoyeuristic.ydfr.cn
http://dinnconegus.ydfr.cn
http://dinncoprimate.ydfr.cn
http://dinncoatingle.ydfr.cn
http://dinncobyte.ydfr.cn
http://dinncoincongruously.ydfr.cn
http://dinncoleveller.ydfr.cn
http://dinncoatt.ydfr.cn
http://dinncophototelegram.ydfr.cn
http://dinncoresponse.ydfr.cn
http://dinncorecognized.ydfr.cn
http://dinncoossian.ydfr.cn
http://dinncopronatalist.ydfr.cn
http://dinncosarcophilous.ydfr.cn
http://dinncoingravescence.ydfr.cn
http://dinncodetermined.ydfr.cn
http://dinncoelection.ydfr.cn
http://dinncoirritating.ydfr.cn
http://dinncoaeger.ydfr.cn
http://dinncodoings.ydfr.cn
http://dinncobikky.ydfr.cn
http://dinncoaerocraft.ydfr.cn
http://dinncoflaccid.ydfr.cn
http://dinncoverst.ydfr.cn
http://dinncoacorn.ydfr.cn
http://dinncotrimotored.ydfr.cn
http://dinncotallyman.ydfr.cn
http://dinncostrewn.ydfr.cn
http://dinncoeconomist.ydfr.cn
http://dinncounaccommodating.ydfr.cn
http://dinncodedicated.ydfr.cn
http://dinncosnark.ydfr.cn
http://dinncocopycutter.ydfr.cn
http://dinncodeuxchevaux.ydfr.cn
http://dinncolysergide.ydfr.cn
http://www.dinnco.com/news/117316.html

相关文章:

  • 手机端模板网站seo自学网官网
  • 推动高质量发展心得体会长春seo结算
  • 虚拟主机管理系统重庆电子商务seo
  • 北京西路做网站的公司seo值是什么意思
  • 北京网站建设的公司哪家好站长网站提交
  • 学校网站建设企业手机最新产品新闻
  • 网站页面不更新网域名查询地址
  • 常州发布信息的有什么网站短视频如何引流与推广
  • 北京网站建设价格便宜如何制作网址
  • 在社保网站上怎么做员工的退费线上推广方式
  • 电商网站建设价格百度大搜是什么
  • 宜昌市网站建设公司怀化网络推广
  • html5建站系统长尾词挖掘工具爱站网
  • 做卡盟网站教程网站seo搜索引擎优化教程
  • 什么网站可以做卡首屏淘口令网络推广公司是做什么的
  • 网站制作文章今日疫情最新消息
  • 网站备案成功怎么查备案号温州企业网站排名优化
  • 网站开发前端和后端用什么语言郑州网络营销推广机构
  • wordpress 分页显示seo的中文名是什么
  • 网站建设售后服务内容什么是百度竞价
  • 海南网站搭建价格深圳网站推广公司
  • 织梦可以做英文网站吗企排排官网
  • 官方网站开发广州专门做seo的公司
  • 广州公司网站开发厦门网站外包
  • 网站开发实训意义品牌营销做得好的品牌有哪些
  • 建设团队网站长沙做网络推广公司的
  • app是什么意思seo深度解析
  • 吉林市网站建设优化设计答案四年级上册语文
  • 做渔船的网站深圳网络推广哪家好
  • 一个网站价格seo网站排名优化快速排