69,381
社区成员
发帖
与我相关
我的任务
分享
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);
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);
推荐第一种;
void*为无类型指针,可以指向任何数据类型,之后通过(char **)p1将void *p1和void *p2,
强制转换成类似成char *a[] = {"abc"}中a的这种类型,即p1是一个地址,
该地址里放的是地址,可以把p1也看成是char *p1[] = {"abc"},
那么*(char **)p1就是指向字符串“abc”,因为strcmp是对字符进行比较,所以必须进行上述的转换。