这个C语法是什么意思?

前端之家收集整理的这篇文章主要介绍了这个C语法是什么意思?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这来自我正在使用的“神奇”数组库.
void
sort(magic_list *l,int (*compare)(const void **a,const void **b))
{
    qsort(l->list,l->num_used,sizeof(void*),(int (*)(const void *,const void *))compare);
}

我的问题是:究竟什么是qsort做的最后一个论点?

(int (*)(const void *,const void*))compare)

qsort将int(* comp_fn)(const void *,const void *)作为比较器参数,但此sort函数采用带双指针的比较器.不知何故,上面的行将双指针版本转换为单指针版本.有人可以解释一下吗?

解决方法

在大多数硬件上,您可以假设指针在硬件级别看起来都相同.例如,在具有平坦64位寻址指针的系统中,指针总是64位整数.指向指针的指针或指向指针指针的指针也是如此.

因此,无论使用哪种方法调用具有两个指针的函数,都可以使用任何带有两个指针的函数.指针的特定类型无关紧要.

qsort一般地处理指针,好像每个都是不透明的.所以它不知道或不关心它们如何被解除引用.它知道它们当前处于什么顺序,并使用compare参数来确定它们应该处于什么顺序.

您正在使用的库可能会保留指向指针的列表.它有一个比较函数,可以比较两个指针指针.因此它将其转换为传递给qsort.它在语法上比例如更好.

qsort(l->list,compare);

/* elsewhere */

int compare(const void *ptr1,const void *ptr2)
{
    // these are really pointers to pointers,so cast them across
    const void **real_ptr1 = (const void **)ptr1;
    const void **real_ptr2 = (const void **)ptr2;

    // do whatever with real_ptr1 and 2 here,e.g.
    return (*real_ptr2)->sort_key - (*real_ptr1)->sort_key;
}

猜你在找的C&C++相关文章