读书人

二维指针取值与一维指针的有关问题求

发布时间: 2012-04-06 12:22:24 作者: rapoo

二维指针取值与一维指针的问题,求高手详解~
/*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++书中的两个整数交换的例子,书中已经讲得非常明白了。

读书人网 >C语言

热点推荐