为什么调用cmp时要使用指针
时间: 2023-09-17 17:13:42 浏览: 42
在这段代码中,调用 `cmp(*m, *first)` 时使用了指针,是因为 `cmp` 是一个函数对象,它在 `max` 函数中作为参数传入,可以是一个函数指针、函数对象或者 lambda 表达式。这里使用的是函数对象,即一个重载了 `operator()` 的类,该类的对象可以像函数一样被调用。而 `*m` 和 `*first` 分别是两个 `Employee` 对象,所以要使用指针解引用得到对象的值,然后才能传入函数对象进行比较。
相关问题
class MyCriterion {public: bool operator()(const Employee& e1,const Employee& e2)const {return e1.age<e2.age;}//排列 }; template <class Iterator,class C> Iterator max(Iterator first,Iterator last,C cmp) { Iterator m=first; for(++first;first!=last;++first) if(cmp (*m,*first))// ③ //函数对象使用 m=first; return m; }解释这段代为什么cmp中要使用指针
在这段代码中,`cmp` 是一个函数对象,用于比较两个 `Employee` 对象的大小。而在 `max` 函数中,通过 `cmp(*m, *first)` 调用函数对象进行比较,需要使用指针解引用得到对象的值,然后传入函数对象进行比较。这里的 `*m` 和 `*first` 都是 `Employee` 对象,所以需要使用指针解引用得到对象的值,然后才能传入函数对象进行比较。
函数指针数组指针如何作为参数写入一个函数内部,比如函数指针数组为int(*Cmp[5])(Con*,const char*,int) = {Cmp_name,Cmp_sex ,Cmp_age,Cmp_tel,Cmp_adress }; ,第一个问题将这个函数指针数组作为该参数如何存放在一个函数内,比如这个函数为void Pp_Delask(),第二个问题,在这个函数内部想调用函数指针数组中的一个函数如何表达这个函数
答:将函数指针数组作为参数存放在函数内部可以使用函数参数传递的方式,比如在函数Pp_Delask()中声明一个参数int(*Cmp[5])(Con*,const char*,int),在调用函数时将函数指针数组传入该参数即可。调用函数指针数组中的一个函数可以使用指针的方式,比如在函数Pp_Delask()中定义一个函数指针int(*p)(Con*,const char*,int),将它指向函数指针数组中的一个函数,比如(*p)=Cmp_name,然后直接调用(*p)(Con*,const char*,int)即可。