使用此参数的目的是int(* cmp)(void *,void *)

问题描述 投票:0回答:3

在我的家庭作业中,我无法理解此参数;

set_maker(LINKEDSTACK stack, int (*cmp) (void*, void*))

有人可以用这个解释吗?

感谢您的帮助。

c parameters int void void-pointers
3个回答
1
投票

它是指向具有两个指针参数并返回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引用的对象的函数是最佳实践。] >


0
投票

在C中,诸如bsearch和qsort之类的处理有序序列的函数需要一个将比较数组元素的函数。


-1
投票

set_maker

© www.soinside.com 2019 - 2024. All rights reserved.