在我的家庭作业中,我无法理解此参数;
set_maker(LINKEDSTACK stack, int (*cmp) (void*, void*))
有人可以用这个解释吗?
感谢您的帮助。
它是指向具有两个指针参数并返回int
的函数的指针。从其名称来看,该函数的语义是它比较所指向的两个对象,并根据某些排序标准返回值<0、0或> 0,指示相对的order或两个对象。
此参数的目的是允许函数(在这种情况下为set_maker()
)对任意类型和排序规则的对象进行操作。例如,如果您在int
对象中进行操作,则可能具有以下功能:
int icompare(const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
然后您可以这样呼叫set_maket()
:
set_maker( istack, icompare ) ;
以便set_maker()
可以在LINKEDSTACK
s的int
上运行。
同样,比较函数可以对具有多个成员的更复杂比较规则的struct
对象进行操作。因此,其目的是通过在提供的函数中提供处理每种数据类型的规则,使set_maker()
具有足够的灵活性来处理任何数据类型,而无需复制大量代码。
此类函数的标准库示例为qsort(),尽管您会注意到参数的类型为const void*
,这对于不打算modify引用的对象的函数是最佳实践。] >
在C中,诸如bsearch和qsort之类的处理有序序列的函数需要一个将比较数组元素的函数。
set_maker