C语言的回调函数

C语言的回调函数:

中心思想
将一个函数作为形式参数传递到另外一个函数中去。通过函数指针去调用另外一个函数。回调函数都是在其他地方通过函数指针来进行回调;
相关性:
1. 回调函数跟函数指针相关
2. 其它函数不需要知道回调函数的具体逻辑
优点
这样的函数指针可以降低函数与函数之间的耦合度
回调函数的概念:
1:回调函数就是通过函数指针调用的函数
2:把函数指针作为参数传递给另外一个函数,当这个指针被用来调用其所指向的函数时,我们就说是回调函数
3:回调函数不是由该函数的实现方直接进行调用,而是在特定的事件或者条件下另外一方调用,用于该事件或条件进行相应。
回调函数流程
1:定义一个回调函数
2:提供函数的调用方在初始化的时候,将回调函数的函数指针传递给调用者
3:当特定事件或者条件发生的时候,调用者使用函数指针所指向的函数对事件进行处理;
优点
1:提高代码的通用性
2:降低函数之间的耦合性
重点
回调函数的整体思想是最重要的

上面概念性的东西太多了,其实回调函数通俗一点来说,就是函数监听法,即我赋予了你一个执行某项函数的权利,当我需要拿到某个东西的时候。你去执行,执行完了再把结果返回给我,这样的一个过程叫做回调过程。比如说,一个按键只有在点击的时候才会去做触发。

out_print.h

#ifndef __OUT_PRINT_H
#define __OUT_PRINT_H

void out_print(int *p,int n); 

#endif

out_print.c

#include"out_print.h"
#include<stdio.h>
void out_print(int* pointer,int n){ 
    int i = 0;
    for(i = 0; i < n;i++){
        printf("num:%d,value:%d\n",i+1,*(pointer+i));
    }   
}

sort_utils.h

#ifndef __SORT_UTILS_H
#define __SORT_UTILS_H

/**
 *冒泡排序法
 */
void bubble_sort(int*,int);

/**
 *选择排序法
 */
void select_sort(int*,int);

#endif

sort_utils.c

#include"sort_utils.h"
#include<stdio.h>
void bubble_sort(int* pointer,int n){ 
    int i,j;
    for(i = 0; i< n -1; i++){
        for(j = n-1;j>i;j--){
            if(*(pointer+j) < *(pointer+j-1)){
                int temp ;
                temp = *(pointer+j);
                *(pointer+j) = *(pointer+j-1);
                *(pointer+j-1) = temp;
            }
        }
    }   

}


void select_sort(int* pointer,int n){ 
    int i,j;
    for(i = 0;i<n-1;i++){
        int pos = i;
        for(j = i+1 ;j <n ;j++){
            if(*(pointer+j)<*(pointer+pos)){
                pos = j;
            }
        }
        if(pos != i){ 
            int temp;
            temp = *(pointer +pos);
            *(pointer+pos) = *(pointer+i);
            *(pointer+i) = temp;
        }

    }   
}

out_data.c

void out_arraydata(int* pointer,int n,void (*pointer1)(int *,int),void *(pointer2)(int *,int)){
    pointer1(pointer,n);
    pointer2(pointer,n);
}

mainTest.c

#include<stdio.h>
#include"sort_utils.h"
#include"out_print.h"
int main(int argc,char * argv[]){
    int bubble_array [] = {13,2,4,1,8,9,15,7};
    out_arraydata(bubble_array,8,bubble_sort,out_print);

    int select_array []  = {7,2,5,3,8,13,35,65,1};
    out_arraydata(select_array,8,select_sort,out_print);

    return 0;
}

输出的结果为:
num:1,value:1
num:2,value:2
num:3,value:4
num:4,value:7
num:5,value:8
num:6,value:9
num:7,value:13
num:8,value:15
num:1,value:2
num:2,value:3
num:3,value:5
num:4,value:7
num:5,value:8
num:6,value:13
num:7,value:35
num:8,value:65

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值