使用*(char**)

fis*_*whj 1 c pointers char

以下代码来自编程实践:

int scmp(const void *p1, const void *p2)
{
    char *v1, *v2;
    v1 = *(char **) p1;
    v2 = *(char **) p2;
    return strcmp(v1, v2);
}
Run Code Online (Sandbox Code Playgroud)

我不明白为什么使用这个表达式*(char **) p1.我们可以(char *)p1改用吗?他们之间有什么区别?

谢谢!

Ric*_*art 5

.这(char **)是一个类型转换,并且在转换*之前的一元取消引用指针.如果你只是采取v1 = (char *) p1,那么v1将被设置为等于p1,当你想要的是v1等于char*哪个p1点.