【发布时间】:2011-05-07 13:22:42
【问题描述】:
qsort(3) 库例程的联机帮助页提供了一个对命令行上作为参数给出的单词进行排序的示例。比较函数如下:
static int
cmpstringp(const void *p1, const void *p2)
{
/* The actual arguments to this function are "pointers to
pointers to char", but strcmp(3) arguments are "pointers
to char", hence the following cast plus dereference */
return strcmp(* (char * const *) p1, * (char * const *) p2);
}
但这里排序的是argv 的元素。现在argv是chars指针的指针,也可以看成chars指针表。
因此它的元素是指向字符的指针,那么cmpstringp 的实际参数不应该是指向字符的指针,而不是“指向字符指针的指针”吗?
【问题讨论】:
-
如果您对一个整数数组进行排序,那么您是否期望将
const void* p1转换为int,而不是const int*?一个 10KB 结构的数组呢,其中的元素比 void* 可能大得多? -
虽然使用该代码来了解正在发生的事情是完全合理的,但您可能需要重新考虑问题的标题。我的意思是,您知道手册页和代码存在多长时间了? 有多少个眼球把它们吸进去了?