函数比较C中的整数(指针)

时间:2014-01-11 14:46:38

标签: c pointers comparison const

以下是以下函数,该函数用于比较两个整数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指针(或指向constant的指针)并不太熟悉,我并不完全理解上述函数背后的原因。如果有人能提供逐步解释,我将不胜感激。

2 个答案:

答案 0 :(得分:1)

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

int p = 10;
int q = 5;

现在,从您main()调用int_cmp(&p, &q);来比较他们的值。

在接收函数int_cmp()中,参数设为const,因此在int_cmp()函数内,int pint q的值不应更改。如果ab和/或int_cmp()的值已更改,则main()中的值也会更改,因为它们已使用引用传递。因此,为了保持值不变,使用const

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

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

答案 1 :(得分:0)

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

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

这是我在这里使用const void*代替const int*的唯一原因。

const的原因是比较应该是仅读取数据的操作。它不应该需要改变参数以便比较它们。因此,比较的标准定义需要const数据来鼓励实施者拥有正确的行为