求教const void指针有关问题

求教const void指针问题
看到例子时有点看不懂,请教。
有函数
public   int   compare(const   void*   a,const   void*   b)
{
        return   strcmp(*(char**)a,*(char**)b);
}

请问
return   strcmp(*(char**)a,*(char**)b);

return   strcmp((char*)a,(char*)b);
有什么区别?

------解决方案--------------------
return strcmp(*(char**)a,*(char**)b);
a/b 的类型是 char** a/b指向字符串指针的数组


return strcmp((char*)a,(char*)b);
a/b 的类型是char* a/b本身就是字符串的指针

------解决方案--------------------
int compare(const void* a,const void* b)
{
return strcmp(*(char**)a,*(char**)b);
}

int compare(const char** a, const char** b)
{
return strcmp (*a, *b);
}
对 a 和 b 解引用才得到字符串