C 中比较整数的函数(指针)
-
26-12-2019 - |
题
下面的函数应该比较两个整数的值 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
s) 并且我并不真正理解上述函数背后的推理。如果有人可以提供一步一步的解释,我将不胜感激。
解决方案
假设在调用函数中,有两个 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
并返回差值。
其他提示
我猜这个方法用于更一般的回调,需要以下类型的函数指针
int (*)(const void*, const void*)
这是我能看到使用的唯一原因 const void*
在这里而不是 const int*
.
使用const的原因是比较应该是只读取数据的操作。它不需要改变参数来比较它们。因此比较的标准定义是 const
鼓励实施者采取正确行为的数据
不隶属于 StackOverflow