【发布时间】:2012-12-20 12:42:37
【问题描述】:
根据 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 翻倍吗?
感谢您的帮助!
【问题讨论】:
-
第二个问题,不能直接输入就知道吗?
-
对于第二个问题:是的,提供了使用
int对象的地址调用它。 -
@Pointy 好吧,由于未定义的行为,它在大多数情况下都可以工作。在某些情况下,最好知道它是否总是有效,而不仅仅是“在这种情况下”。
-
@Pointy 通过实验进行编程(“找出”)总是一个坏主意。特别是对于 C,其中许多属性是实现定义的、未指定的或未定义的。看,当我将空指针传递给 printf 时,它会打印“(null)”!这是对下一次实施的惊喜的保证。
-
这个问题是两个问题。由于这两个问题不一定相互依赖,因此您最好发布两个问题。
标签: c void-pointers qsort