在我的作业中我无法理解这个参数;
set_maker(LINKEDSTACK stack, int (*cmp) (void*, void*))
有人可以用这个来解释一下吗?
感谢您的帮助。
最佳答案
它是一个指向带有两个指针参数并返回一个int
的函数的指针。从它的名字来看,该函数的语义是,它比较所指向的两个对象,并返回一个值<0、0或>0,指示两个对象根据某种排序标准的相对顺序 .
此类参数的目的是允许函数(在本例中为set_maker()
)对任意类型和排序规则的对象进行操作。例如,如果您在 int
对象中进行操作,您可能有一个函数:
int icompare(const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
然后你可以这样调用set_maker()
:
set_maker( istack, icompare ) ;
这样 set_maker()
就可以对 int
的 LINKEDSTACK
进行操作。 (我在这里做出了一些合理的猜测,因为您没有提供 set_maker()
或 LINKEDSTACK
的详细信息)。
同样,比较函数可以对具有涉及多个成员的更复杂比较规则的 struct 对象进行操作。因此,其目的是通过在所提供的函数中提供处理每种数据类型的规则,使 set_maker()
足够灵活,能够处理任何数据类型,而无需重复大量代码。
此类函数的标准库示例是 qsort() ,尽管您会注意到参数的类型为 const void*,这对于不打算修改引用对象的函数来说是最佳实践。
关于c - 使用这个参数的目的是什么,int (*cmp) (void*, void*),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62074728/