二维指针取值与一维指针的有关问题,求高手详解

二维指针取值与一维指针的问题,求高手详解~
/*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);
}
这是一段代码,我的问题是:在第5 第6行,代码是先强制转换为二维指针,而后取值一维-----这样做的好处是什么,为什么不直接强制转换为一维赋值给v1 v2?

------解决方案--------------------
因为参数传递进来就是二级指针的。如果你传个char*作为参数那么这个函数就是一个错误的实现。
------解决方案--------------------
探讨
引用:

因为参数传递进来就是二级指针的。如果你传个char*作为参数那么这个函数就是一个错误的实现。

为什么说参数传递进来就是二级指针?不大明白~

------解决方案--------------------
楼主目前的实现是错误的,有两种修改方案:
C/C++ code
int scmp(const void *p1,const void *p2)
{
  char *v1,*v2;
  v1=(char *)p1;/*这里是问题关键*/
  v2=(char *)p2;/*这里是问题关键*/
  return strcmp(v1,v2);
}
调用方法为:char *p1;
char *p2;
……;
scmp(p1, p2);

------解决方案--------------------
这个要看你是否需要修改p1以及p2的地址了。

就目前这个例子看,是没有必要使用二维指针,并且使用二维指针效率会下降一点点。。。

至于为什么要求这么做,我相信,是要求程序员养成地址参数传递的习惯,避免赋值参数传递时,没有将参数的修改反馈回来。记得C以及C++书中的两个整数交换的例子,书中已经讲得非常明白了。