繁体   English   中英

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

[英]Function comparing integers in C (pointers)

下面的函数应该比较两个整数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 s的指针)不太熟悉,并且我不太了解上面函数的背后原因。 如果有人可以提供分步说明,我将不胜感激。

假设在调用者函数中,您有两个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_cmp()它们类型转换为int因为可以安全地在定义的变量类型的指针上允许算术运算符。

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

我猜想这种方法用在更通用的回调中,期望使用以下类型的函数指针

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

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

使用const的原因是比较应该是仅读取数据的操作。 它不需要对参数进行任何突变即可进行比较。 因此,compare的标准定义采用const数据来鼓励实施者采取正确的行为

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM