【发布时间】:2012-04-28 13:55:20
【问题描述】:
这段代码sn-p手抄自我正在读的一本书:
/* scmp: string compare of *p1 and *p2 */
int scmp(const void *p1, const void *p2)
{
char *v1, *v2;
v1 = *(char **) p1;
v2 = *(char **) p2;
return strcmp(v1, v2);
}
此函数与 qsort 一起用于对字符串数组进行排序。我不明白的一点是,为什么v1 = *(char **) p1; 而不仅仅是v1 = (char *) p1; 或者甚至不会这样工作; v1 = p1;?我猜编译器应该自动对该分配进行类型转换。甚至,考虑一下:
/* scmp: string compare of *p1 and *p2 */
int scmp(const void *p1, const void *p2)
{
return strcmp(p1, p2);
}
我认为(我可能大错特错)编译器应该将 p1 和 p2 类型转换为 char *,因为这是 strcmp(char *, char *) 所期望的。
总结一下,问题是为什么v1 = *(char **) p1?
【问题讨论】: