一个字符类型转换的问题??

raymond323 2005-09-03 12:35:23
分别有两个函数
int comp(const void* p1,const void* p2)
{
const int* pi1=(const int*) p1;
const int* pi2=(const int*) p2;
}

int comp(const void* p1,const void* p2)
{
const char** s1=(const char**) p1;
const char** s2=(const char**) p2;
return strcmp(*ps1,*ps2);
}
为什么在处理字符数据的时候要转换成char** 而不是char*
...全文
181 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
linfengwang 2005-09-04
  • 打赏
  • 举报
回复
排序函数中调用的回调函数的例子:
#include <stdlib.h>
#include <stdio.h>
#include "string.h"

int comp(const void*,const void*);
int comp1(const void* p1,const void* p2);

int main()
{
int i;
char* a[]={"a","bc","abc","dfgdg"};
int b[] = {5,7,1,9,8};
int n = sizeof(b)/sizeof(b[0]);
//或者用这个
int n = sizeof(a)/sizeof(a[0]);

qsort(b, n, sizeof(b[0]), comp1);
//qsort(a, n, sizeof(a[0]), comp);

for(i=0;i<n;++i)
{
printf("%d",b[i]);
//prinf("%s",a[i]);
printf(" ");
}
}

int comp(const void* p1,const void* p2)
{
const char** ps1=(const char**) p1;
const char** ps2=(const char**) p2;
return strcmp(*ps1,*ps2);
}

int comp1(const void* p1,const void* p2)
{
int * ps1 = (int *) p1;
int * ps2 = (int *) p2;
printf("%d, %d\n" ,*ps1, *ps2);
return (*ps1)-(*ps2);
}
参数传递的数组元素的地址,&a[i]是(char **类型),而&b[i]是(int*)明白了么
bingbox_1984 2005-09-03
  • 打赏
  • 举报
回复
这个问题有点深奥,我只知道一定要类型匹配
如果仅从这个函数来说,感觉没必要用二级指针,用一级就够了
那位达人解释一下
关注
lxzhou 2005-09-03
  • 打赏
  • 举报
回复
这个函数接收的是两个常量字符串,const char[];传递给函数的是不是两个const char* const指针.
const char**的const char* 指向的是一个常量的char* 指针,这样才能和传递过来的指针完全匹配吧.不知这样的解释是不是合理,可以在机器上调试一下看有没有什么警告信息,在那可能得到一点启示!
现在我自己都有点晕了!哎.....
drizzlecrj 2005-09-03
  • 打赏
  • 举报
回复
晕死,第一个竟然连返回值都没。
mituzhishi 2005-09-03
  • 打赏
  • 举报
回复
没必要用二级指针,用一级指针也一样正确!

做过测试了.
allen_zhaozhencn 2005-09-03
  • 打赏
  • 举报
回复
看不出为什么这样做, 依据comp的作用,没有必要转成**.
zhouhuahai 2005-09-03
  • 打赏
  • 举报
回复
怎么会有两个声明一模一样的函数,进行重载解析时会造成歧义!
megaboy 2005-09-03
  • 打赏
  • 举报
回复
这表示p1和p2的值所指向的变量保存了真正要比较的字符串的首地址,所以才需要使用二级指针。

不过,单从上面代码来说的话,p1和p2完全可以定义为const void **p1和const void **p2,然后return strcmp(*p1, *p2)就OK了。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧