什么是回调?它是如何实现的,例如C

前端之家收集整理的这篇文章主要介绍了什么是回调?它是如何实现的,例如C前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我意识到这是一个新手的问​​题,但是我正在尝试学习C我经常对这种表达“回调”感到困惑.我已经google了,检查维基百科,但没有找到一个很好的解释.我熟悉一些 Java和C#,但是听起来不太可能,我从来没有真正了解一个回调的意思.

如果有人知道如何将这个术语解释给一个简单的外行人,那我真的很感激.

解决方法

I am familiar with some Java and C#

回调是这些语言中的一个事件或委托 – 一种在其上下文中由别人的代码运行代码的方式.因此,术语“回调”:

>你调用其他一些代码
它运行,也许计算一个中间值
>它回调你的代码,也许给你中间值
>它继续运行,最终通过完成将控制权交给你

典型的例子是一个用户定义的比较函数(回调)的排序例程.给定一个排序例程,如:

void Sort(void* values,int length,int valueSize,int (*compare)(const void*,const void*) 
{
   for (int i = 0; i < length; i = i + 2) {
      // call the callback to determine order
      int isHigher = compare(values[i],values[i + 1]);
      /* Sort */
   }
}

(进行排序的具体细节并不重要 – 只关注任何排序算法需要比较2个值并确定哪个更高)

那么现在我们可以定义一些比较函数

int CompareInts(const void* o,const void* p) {
   int* a = (int*) o;
   int* b = (int*) p;

   if (a == b) return 0;
   return (a < b) ? -1 : 1;
}

int ComparePersons(const void* o,const void* p) {
   Person* a = (Person*) o;
   Person* b = (Person*) p;

   if (a == b) return 0;
   return (a->Value() < b=>Value()) ? -1 : 1;
}

并重新使用与他们相同的排序功能

int intValues[10];
Person personValues[10];

Sort(intValues,10,sizeof(intVaues[0]),CompareInts);
Sort(personValues,sizeof(personVaues[0]),ComparePersons);

如果您使用成员函数,事情会变得更加复杂,因为您必须管理这个指针,但概念是一样的.与大多数事情一样,首先在C中更容易地解释它们.

猜你在找的C&C++相关文章