下面的函数应该比较两个整数的值 ab 并返回一个正数,如果 a>b 否则为负数:

 int int_cmp(const void *a, const void *b)
{
    const int *ia = (const int*)a;
    const int *ib = (const int*)b;
    return *ia - *ib;
}

我不太熟悉 constant 指针(或指向 constants) 并且我并不真正理解上述函数背后的推理。如果有人可以提供一步一步的解释,我将不胜感激。

有帮助吗?

解决方案

假设在调用函数中,有两个 int 变量,

int p = 10;
int q = 5;

现在,从你的 main() 你正在打电话 int_cmp(&p, &q); 来比较他们的价值。

在接收函数中 int_cmp() 参数已制定 const 以便在里面 int_cmp() 函数,值 int pint q 不应该改变。如果值 a 和/或 b 被改变在 int_cmp(), ,它们将在 main() 另外,因为它们是使用引用传递的。因此,为了保持值不变, const 用来。

接下来,一旦参数被接收到 int_cmp(), ,它们被类型转换为 int 因为算术运算符可以安全地允许在已定义变量类型的指针上。

我希望数学部分非常简单。它取消对指针的引用并计算指针值之间的差异 ab 并返回差值。

其他提示

我猜这个方法用于更一般的回调,需要以下类型的函数指针

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

这是我能看到使用的唯一原因 const void* 在这里而不是 const int*.

使用const的原因是比较应该是只读取数据的操作。它不需要改变参数来比较它们。因此比较的标准定义是 const 鼓励实施者采取正确行为的数据

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top