学学 回调函数

文章介绍了回调函数的概念,即一个函数的指针作为参数传递给另一个函数,在特定事件发生时被调用。文中通过一个生活例子和C语言代码展示了如何在冒泡排序中使用回调函数进行比较操作,强调了函数指针和类型转换的重要性。
摘要由CSDN通过智能技术生成

回调函数 是 一个函数。如果把 函数指针 作为一个参数传递给另外一个函数(A),A利用这个指针调用这个函数指针所指向的函数,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

举个生活例子 :

B君(回调函数),A君(调用函数)。B君去A君家买东西,发现缺货,B君留下电话(函数指针)。这个例子响应事件为:有货,A君就叫B君来。

代码案例:冒泡排序的实现

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

void swap(char* a, char* b, int sz) // 由于传过来的并不知道是什么类型,依旧需要char* 来截断,然后根据sz来获取大小
{
    char k;
    for(int x = 0 ; x < sz ; ++x)//
    {
        k = *a;
		*a = *b;
		*b = k;
        a++;
        b++;
    }
	
	
}


int com(const void* x , const void* y)//比较函数
{
	return *(int*)x - *(int*)y;
}

void Bubble_sort(void* arr,int num,int sz,int(*com)(void* e1, void* e2))//sz代表数组里面单个元素的大小
{
	for (int x = 0; x < num; ++x)
	{
		int flage = 1;
		for (int y = 0; y < num - x - 1; ++y)
		{
			if (com((char*)arr + y * sz, (char*)arr + (y + 1) * sz)>0)//void类型的指针不可以加减,因此要强制类型转换为char*,
                //为什么要用char*呢? 因为char*  只访问一个字节,如果是int类型,只需要将arr截取为char类型,然后再加上它的宽度,就可以为访问到					//后面的内容
			{
				flage = 0;
				swap((char*)arr + y * sz, (char*)arr + (y + 1) * sz,sz);
			}
		}
		if (flage)
		{
			break;
		}

	}
}

int main(void)
{
	int arr[10] = { 9,8,7,6,5,4,3,2,1,0 };
	int num = sizeof(arr) / sizeof(int);
	int sz = sizeof(int);
	Bubble_sort(arr , num , sz , com );
	for (int x = 0; x < num ; ++x)
	{
		printf("%d ", arr[x]);
	}

}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值