关于函数指针的一个很好的教程给出了一个我有疑问的例子。这是一个简单的排序函数,其参数之一是函数。这是函数调用。如您所见, (*compar) 函数有两个“const void*”参数
void qsort(void *base, size_t nmemb, size_t size,
int(*compar)(const void *, const void *));
稍后调用此函数:
#include <stdlib.h>
int int_sorter( const void *first_arg, const void *second_arg )
{
int first = *(int*)first_arg;
int second = *(int*)second_arg;
if ( first < second )
{
return -1;
}
else if ( first == second )
{
return 0;
}
else
{
return 1;
}
}
int main()
{
int array[10];
int i;
/* fill array */
for ( i = 0; i < 10; ++i )
{
array[ i ] = 10 - i;
}
qsort( array, 10 , sizeof( int ), int_sorter );
for ( i = 0; i < 10; ++i )
{
printf ( "%d\n" ,array[ i ] );
}
}
我的问题是编译器如何知道“int_sorter”正在比较哪两个元素?它们没有在初始函数中被调用,我认为这是因为作为参数调用的函数处理了它,但是该函数如何知道在这个数组中我们正在比较这两个数字?
我也不确定是什么*(int *)
意思;我怀疑这是答案的一部分。