函数指针做函数参数(回调函数)的例子

太过爱你忘了你带给我的痛 2022-09-10 08:21 268阅读 0赞

提供一个函数可以输出任意类型的数据。

实例一:

  1. void my_printf(void * data,void(*mp)(void *)){
  2. // 利用传入的数据作为参数去调用第二个参数对应的方法
  3. mp(data);
  4. }
  5. // 打印整形数据方法
  6. void print_int(void * data){
  7. int * value = data;
  8. printf("%d\n",*value);
  9. }
  10. // 打印浮点型形数据方法
  11. void print_double(void * data){
  12. double * value = data;
  13. printf("%f\n",*value);
  14. }
  15. struct person{
  16. char name[64];
  17. int age;
  18. };
  19. // 打印结构体数据方法
  20. void print_person(void * data){
  21. struct person * value = data;
  22. printf("姓名:%s 年龄:%d\n",value->name,value->age);
  23. }
  24. int main(void){
  25. int a = 10;
  26. my_printf(&a,print_int);
  27. double b = 3.1415926;
  28. my_printf(&b,print_double);
  29. struct person p = {"lisi",23};
  30. my_printf(&p,print_person);
  31. return 0;
  32. }

实例二:

  1. // 打印不同数组的方法
  2. // 参数一:传入数组首地址 参数二:数组中每个元素占用内存空间 参数三:数组长度
  3. void print_all_arr(void * arr,int eleSize,int len,void(*mp)(void *)){
  4. char * p = arr; // 利用p指针接受数组首地址
  5. for(int i=0;i<len;i++){
  6. // 获取每个元素的地址
  7. char * pAddr = p + eleSize * i;
  8. // 输出打印的方法
  9. mp(pAddr);
  10. }
  11. }
  12. // 打印整形数据方法
  13. void print_int(void * data){
  14. int * value = data;
  15. printf("%d\n",*value);
  16. }
  17. struct person{
  18. char name[64];
  19. int age;
  20. };
  21. // 打印结构体数据方法
  22. void print_person(void * data){
  23. struct person * value = data;
  24. printf("姓名:%s 年龄:%d\n",value->name,value->age);
  25. }
  26. int main(void){
  27. int arr[] = {10,20,30,40,50};
  28. int len1 = sizeof(arr)/sizeof(int);
  29. print_all_arr(arr,sizeof(int),len1,print_int);
  30. struct person pArray[] = {
  31. {"lisi",23},{"wangwu",20},{"zhangsan",21}};
  32. int len2 = sizeof(pArray)/sizeof(struct person);
  33. print_all_arr(pArray,sizeof(struct person),len2,print_person);
  34. return 0;
  35. }

发表评论

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

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

相关阅读

    相关 函数-例子-C语言

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