这个代码片段是从我正在阅读的一本书中手工复制的:
/* 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
?