是我自己的问题还是这段代码在Programming Pearls中有误(快速排序需要2个const voids,对吗?)如果是这样,那么我的解决方案是正确的吗?抱歉,我正在学习中...
int wordncmp(char *p, char* q)
{ int n = k;
for ( ; *p == *q; p++, q++)
if (*p == 0 && --n == 0)
return 0;
return *p - *q;
}
int sortcmp(char **p, char **q)
{ return wordncmp(*p, *q);
}
...
qsort(word, nword, sizeof(word[0]), sortcmp);
这是一个解决方案吗?
int sortcmp(const void *p, const void *q)
{ return wordncmp(* (char * const *) p, * (char * const *) q);
}
char *
和void *
具有相同的表示形式?我同意使用错误的函数指针类型进行调用仍然是未定义行为,但我不认为参数的表示形式是问题所在。相反,问题在于病态实现可能会对传递void *
与char *
使用不同的调用约定,例如为每种类型设置单独的参数寄存器集。 - R.. GitHub STOP HELPING ICEchar*
和void*
具有相同的表示和对齐要求(C99 §6.2.5/27),但char**
和void*
不一定兼容。 - Adam Rosenfield