2

根据 C 参考,标准库中提供的 qsort 函数具有以下形式

void 
qsort ( void * base, size_t num, size_t size, int ( * compar ) ( const void *, const void * ) );

我的问题是为什么比较函数必须在表单中有参数,const void *这是什么意思const void *

另一个问题是,如果一个函数接受形式为 的参数const void *,它可以改变这个指针指向的值吗?

例子:

static int double_a_number(const void * val){
    *(int *)val = *(int *)val * 2;
    return 0;
}

这真的会使变量 val 加倍吗?

感谢帮助!

4

1 回答 1

3

为什么比较函数必须有形式的参数const void *

因为这是 C 中最通用的类​​型。请记住,它qsort可用于对任何类型的数组进行排序。

另一个问题是,如果一个函数接受形式为 的参数const void *,它可以改变这个指针指向的值吗?

并非没有抛弃const. 这通常是一个坏主意(这肯定是出乎意料的,而且还可能导致未定义的行为或崩溃)。在比较器功能中肯定没有任何意义!

于 2013-01-06T17:47:14.233 回答