gpt4 book ai didi

c - 为什么不需要将参数传递给 qsort 比较器函数?

转载 作者:太空宇宙 更新时间:2023-11-04 00:31:56 25 4
gpt4 key购买 nike

以下代码取自 here .

* qsort example */
#include <stdio.h>
#include <stdlib.h>

int values[] = { 40, 10, 100, 90, 20, 25 };

int compare (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}

int main ()
{
int n;
qsort (values, 6, sizeof(int), compare);
for (n=0; n<6; n++)
printf ("%d ",values[n]);
return 0;
}

我们有一个比较函数,其签名中有参数,但是当我们在 qsort 中调用它时,没有传递任何参数。 ab 的值是如何传递给函数的?谢谢

最佳答案

在此表达式的上下文中:

qsort (values, 6, sizeof(int), compare);

标识函数的子表达式 compare 衰减为指向该函数的指针(而不是函数调用)。该代码实际上等同于:

qsort (values, 6, sizeof(int), &compare);

这与数组用作函数参数时发生的事情完全相同(您以前可能见过也可能没见过,但更常被问到):

void f( int * x );
int main() {
int array[10];
f( array ); // f( &array[0] )
}

关于c - 为什么不需要将参数传递给 qsort 比较器函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11353260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com