以下是以下函数,该函数用于比较两个整数a
和b
的值,如果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
的指针)并不太熟悉,我并不完全理解上述函数背后的原因。如果有人能提供逐步解释,我将不胜感激。
答案 0 :(得分:1)
假设在调用函数中有两个int变量
int p = 10;
int q = 5;
现在,从您main()
调用int_cmp(&p, &q);
来比较他们的值。
在接收函数int_cmp()
中,参数设为const
,因此在int_cmp()
函数内,int p
和int q
的值不应更改。如果a
中b
和/或int_cmp()
的值已更改,则main()
中的值也会更改,因为它们已使用引用传递。因此,为了保持值不变,使用const
。
接下来,一旦在int_cmp()
中收到参数,就会将它们类型化为int
,因为可以在已定义变量类型的指针上安全地允许算术运算符。
我希望算术部分非常简单。它取消引用指针并计算指针a
和b
的值之间的差异,并返回差值。
答案 1 :(得分:0)
我猜这个方法用于需要以下类型的函数指针的更一般的回调
int (*)(const void*, const void*)
这是我在这里使用const void*
代替const int*
的唯一原因。
const的原因是比较应该是仅读取数据的操作。它不应该需要改变参数以便比较它们。因此,比较的标准定义需要const
数据来鼓励实施者拥有正确的行为