什么是回调函数?
当一个函数的地址/指针被当作参数,传给另一个函数,这个指针被用来调用它所指向的函数时,这个被调用的函数就是回调函数。
回调函数不是函数实现方调用,而是特定场景由另一方调用,用于对该事件的回应。
下图示例:
int Add (int x, int y)
{
return x+y;
}
void Operation ( int (*p)(int , int ))
{
int x = 0;
int y = 0;
int result = 0;
scanf("%d %d",&x,&y);
result = p(x , y);
printf("Operation = %d \n",result);
}
int main ( )
{
int i = 0;
int j = 0;
Operation(Add);
return 0;
}
把函数Add作为函数Operation的参数,定义函数Add,定义函数Operation。在Operation中,传的是函数,所以形参用函数指针p变量接收Add的地址。在Operation内部,把传来的Add函数进行调用。虽然在操作Operation函数,但实际上通过Add的调用,操作的是Add的函数。
除了加法,还可以有乘法除法,这时只需要把函数定义写在前面,就可以通过给Operation传不同的参数(函数)来调用不同的函数。省了------输入操作数,打印操作数这些重复过程了。
qsort函数
这个函数是库函数。
qsort(参数1,参数2,参数3,参数4)
参数1表示需要排序首元素地址。
参数2表示需要排序的元素个数。(可以用sizeof计算
参数3表示单个元素所占的内存大小,单位字节。(可以用sizeof计算
参数4是自定义函数,这个函数用来比较相邻两个数的大小。它的第一个参数是 const void* p1,第二个是const void *p2,对这两个数作差,返回值大于0,则 p1和p2交换,小于和等于0不变。如果是字符,就要用别的比较方式了(strcmp函数