char *p 和 (char*) p有区别吗

lin_style 2006-07-28 11:41:14
RT
一个排序函数中见到的
...全文
346 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
折腾_苏州 2006-07-28
  • 打赏
  • 举报
回复
楼上说的在理:
char *p;定义一个字符指针p;
(char *) p 是把变量p强制转换成char *类型, 之前p可以是其他类型如 int ,void 型
adintr 2006-07-28
  • 打赏
  • 举报
回复
区别大了,
一个是变量定义,一个是类型转换
唐巧 2006-07-28
  • 打赏
  • 举报
回复
char *p 和 (char*) p的区别在于:
char *p是定义一个字符指针。也就是在定义变量。
(char *) p 是把变量p强制转换成char *类型。
ckp 2006-07-28
  • 打赏
  • 举报
回复
没有区别
唐巧 2006-07-28
  • 打赏
  • 举报
回复
int compare(const void*a,const void *b){
return strcmp((char*)a,(char*)b);

}
以上是你的部分源码,可以看到,变量a,b的类型为 const void *
而strcmp函数需要的两个参数类型必须是char *类型,所以这里用强制类型转换把
void * 转换成char *
即把指行一个空类型的指针转成一个指向字符类型的指针。

如果你把char *去掉的话,编译应该会报出类型不符的错误。
lin_style 2006-07-28
  • 打赏
  • 举报
回复
#include<iostream>
#include <stdlib.h>
#include <string>
using namespace std;

int compare(const void *a,const void *b);

char list[5][4]={"cat","car","cab","cap","can"};

int main()
{
qsort((void*)list,5,sizeof(list[0]),compare);

for(int i=0;i<5;i++)
cout<<list[i]<<endl;
return 0;
}

int compare(const void*a,const void *b){


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

}

源码
对 return strcmp((char*)a,(char*)b); 中的(char*) a 有点迷茫~

64,647

社区成员

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

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