以下代码是使用函数回调的示例。我不明白为什么需要函数回调,因为一个函数可以调用另一个函数。
int absolute_compare(int a , int b) // callback function
{
if (abs(a)>abs(b)) return -1;
else
return 1;
}
void sort(int *A, int size, int(*Ab_compare)(int, int))
{
int i,j,temp;
for(i=0;i<size;i++)
for (j=0;j<size-1;j++)
{
if (Ab_compare(A[j],A[j+1])>0)
{
temp=A[j];
A[j]=A[j+1];
A[j+1]=temp;
}
}
}
int main()
{
int A[]={1,7,-5,8,-67,45,34,89,23,-11,2,-8,4};
int size,i;
size=sizeof(A)/sizeof(A[0]);
sort(A,size,absolute_compare);
for (i=0;i<size;i++)
{
printf("%d ",A[i]);
}
printf("\n.......\n");
return 0;
}
由于sort()函数可以调用Absolute_compare(),为什么将Absolute_compare()作为参数传递给sort()然后再调用Absolute_compare()?
答案 0 :(得分:0)
这是为了支持各种回调函数-您可能需要另一个比较函数(我认为没有其他函数可以直接比较整数),并且您将不必实现另一个排序函数。