不明白这个函数签名:(const Boolean(* equals)(const Object object_1,const Object object_2))

时间:2011-11-04 19:17:43

标签: c

我是C的新手,我正在尝试使用Arraylist库。然而,“创建Arraylist”功能给我带来了麻烦,因为签名对我来说几乎没有任何意义。具有该签名的有效函数调用是什么?

这是完整的签名:   Arraylist arraylist_create(const Boolean(* equals)(const Object object_1,const Object object_2))

非常感谢任何帮助!!

4 个答案:

答案 0 :(得分:5)

Arraylist arraylist_create(const Boolean (*equals)(const Object object_1, 
                                                   const Object object_2));

函数arraylist_create的参数说equals是一个函数指针,它带有两个类型为const Object的参数,返回类型为const Booleanarraylist_create返回类型为Arraylist

这个例子可以帮助你 -

 const Boolean foo( const Object obj1, const Object obj2 ){
      // ....
 }

 Arraylist temp = arraylist_create( &foo );

More about function pointers.

答案 1 :(得分:0)

我认为你需要从右到左阅读它才有意义。

这是一个函数指针,用于获取类型为Object的2个非变化(const)对象并返回Boolean类型的不可更改(const)对象。

答案 2 :(得分:0)

arraylist_create返回一个Arraylist,并将一个指向函数的指针作为参数返回const Boolean,并将两个const Object作为参数。因此,首先您需要指定(或获取)与equals的要求兼容的函数(可能是为了比较列表元素),例如:

const Boolean myEquals(const Object object_1, const Object object_2) {
    return (Boolean which is true if object_1 is equal to object_2);
}

然后:

Arraylist list = arraylist_create(myEquals);

答案 3 :(得分:0)

对我而言,该函数需要另一个函数,用于比较arraylist中的对象。

这样的事情:

const Boolean my_equals(const Object object_1, const Object object_2)
{
    // Should really cast the objects to the correct type for your values
    return object_1 == object_2;  // Replace with your own comparison
}

// In main()
Arraylist arraylist = arraylist_create(my_equals);