回调函数-例子-C语言

不念不忘少年蓝@ 2022-04-03 05:56 542阅读 0赞

  之前看到过关于回调函数的内容,不是特别理解,最近突然又看到了关于回调函数的内容,想着试着把代码实现一遍可能会加深理解。于是搜了一下回调函数的概念,在百度百科上看到的概念:回调函数概念
  根据上面给的代码,我试着敲了一遍,竟然能够运行出来,我也很是诧异,不过也挺开心的,虽然不是自己写的,只是敲了一遍,但是对于理解回调函数还是有一定的作用的。

  1. #include "stdlib.h"
  2. #include "stdio.h"
  3. #include "string.h"
  4. typedef unsigned char byte;
  5. typedef int (*CompareFunction)(const byte*a,const byte*b);
  6. //两个数字比较大小
  7. int comInt(const byte *a,const byte *b)
  8. {
  9. int i1 = *(int*)a;
  10. int i2 = *(int*)b;
  11. if(i1 > i2)
  12. return 1;
  13. if(i1 < i2)
  14. return -1;
  15. return 0;
  16. }
  17. //两个字符串比较大小
  18. int comString(const byte*s1,const byte*s2)
  19. {
  20. const char *c1 = (char*)s1;
  21. const char *c2 = (char*)s2;
  22. /*此处之前写的是return strcmp(c1,c2)\
  23. 但是由于strcmp函数当c1>c2时,返回的是正数,但不一定是1,
  24. 而在排序算法中是按照1来判断的,所以此处进行了修改*/
  25. int n = strcmp(c1,c2);
  26. if(n > 0)
  27. return 1;
  28. if(n < 0)
  29. return -1;
  30. return 0;
  31. }
  32. //冒泡排序
  33. //void BubbleSortT(byte *array,int size,int elem_size,int (*ptr)())//这种写法也是正确的
  34. void BubbleSortT(byte *array,int size,int elem_size,CompareFunction cmpFun)
  35. {
  36. int i,j;
  37. for(i = 0;i < size;i ++)
  38. {
  39. for(j = 0;j < size - i - 1;j ++)
  40. {
  41. //被注释掉的这行对应于上面被注释掉的函数的写法
  42. //if(1 == (*ptr)(array + j * elem_size,array + (j + 1) * elem_size))
  43. if(1 == cmpFun(array + j * elem_size,array + (j + 1) * elem_size))
  44. {
  45. byte *temp = (byte *)malloc(sizeof(byte));
  46. memcpy(temp,array + j * elem_size,elem_size);
  47. memcpy(array + j * elem_size,array + (j + 1)*elem_size,elem_size);
  48. memcpy(array + (j + 1) * elem_size,temp,elem_size);
  49. free(temp);
  50. }
  51. }
  52. }
  53. }
  54. int main(int argc, char* argv[])
  55. {
  56. int i = 0;
  57. int arr1[5] = {
  58. 5432,4321,3210,2109,1098};
  59. printf("数组arr1排序前:\n");
  60. for(i = 0;i < 5;i ++)
  61. {
  62. printf("%d ",arr1[i]);
  63. }
  64. printf("\n");
  65. BubbleSortT((byte*)arr1,5,sizeof(int),comInt);
  66. printf("数组arr1排序后:\n");
  67. for(i = 0;i < 5;i ++)
  68. {
  69. printf("%d ",arr1[i]);
  70. }
  71. printf("\n");
  72. char ch[5][10] = {
  73. "fsdc","aewq","fasss","fsdccc","dhijk"};
  74. printf("数组ch排序前:\n");
  75. for(i = 0;i < 5;i ++)
  76. {
  77. printf("%s ",ch[i]);
  78. }
  79. printf("\n");
  80. BubbleSortT((byte*)ch,5,10,comString);
  81. printf("数组ch排序后:\n");
  82. for(i = 0;i < 5;i ++)
  83. {
  84. printf("%s ",ch[i]);
  85. }
  86. printf("\n");
  87. }

运行结果为:

在这里插入图片描述

  对于回调函数我理解的还不是很深刻,我觉得这是需要通过真正的项目才能真正深入理解。自己写的代码太少,内容不多,其实发挥不了回调函数真正的价值。
  不班门弄斧了,继续学习吧。以后有机会再深入了解的话会再更新相关内容!

发表评论

表情:
评论列表 (有 0 条评论,542人围观)

还没有评论,来说两句吧...

相关阅读

    相关 C语言函数

    在理解了函数指针这样的概念后,我们就可以去理解回调函数这样的东西,回调函数非常好理解,回调函数就是有个参数是函数指针的函数 函数指针:故名思义,指向函数的指针

    相关 函数-例子-C语言

      之前看到过关于回调函数的内容,不是特别理解,最近突然又看到了关于回调函数的内容,想着试着把代码实现一遍可能会加深理解。于是搜了一下回调函数的概念,在百度百科上看到的概念:[