问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言:strcmp(*(char**)a,*(char**)b))

发布网友 发布时间:2023-03-26 19:09

我来回答

3个回答

热心网友 时间:2023-05-02 00:40

*(char**)a
这个语句的执行顺序是
1.(char**)a 将变量a强制转换成char类型的指向指针的指针
2.对1算出来的地址解引用

其实对strcmp的形参做这些操作的目的只有一个,就是转换成char *类型,再传入。

这里a是一个指针,指向的地方又是一个指针(即a是指向指针的指针),a指向的那个指针所指向的地方才是存放我们真正想要的值

具体的说:
假设a这个变量的值是0x1234,由于a是个指针0x1234表示的当然是个地址,
如果对a变量解引用一次,就是到0x1234这个地址上去看看,假设看到的值是0x2345,
由于a是个指向指针的指针,即指向的地方存的还是个指针,就是0x1234这个地方存放的值0x2345还是个地址,这个地址0x2345就是一个字符串或者字符数组的首地址,起类型是char * 所以就可以作为strcmp的形参了

至于strcmp((char*)a,(char*)b))和strcmp(*(char**)a,*(char**)b))
的差别在于strcmp((char*)a,(char*)b))中的a和b已经是某种类型的指针(不是指针的指针)了,就无需先强制转换成char **了,只需要转换成char * 就可以了

最后一个:
return(*(char *)a-*(char *)b),是把指针a和b转换成char * 然后解引用一次后就得到了指针所指向的字符了,返回的值是两个字符的ASCII值的差值

关于强制类型转换
char (var1) 和int(var1)区别:
char (var1)告诉编译器把var1变量所在的内存的字节序列,每次一起解释1个字节(char是单字节类型的)
int(var1)告诉编译器把var1变量所在的内存的字节序列,每次一起解释4个字节,即每次取4个字节的内存解释为一个int(int是4字节类型的,有的环境中是2字节的,就一次解释2个字节)

热心网友 时间:2023-05-02 00:41

qsort只是为你提供给它的一组结构数据调用你指定的回调函数进行排序
这时qsort的原型:
void qsort(void * Base,size_t NumOfElements,
size_t SizeOfElements, int (__cdecl * PtFuncCompare)(const void *, const void *));
Base是排序的数据的基地址,NumOfElements是排序的数据的数量,SizeOfElements是一个元素的大小,PtFuncCompare是回调函数指针。
通常的strcmp不能作为qsort的参数因为strcmp比较的是字符,而qsort欲比较的是字符串,qsort会把char**传给PtFuncCompare,而如果将strcmp传给PtFuncCompare的话将导致参数类型不符。

故回调函数需自己编写。例如
int mystrcmp(const void *str1, const void *str2){
return(strcmp(* (char * const *)str1, * (char * const *)str2));
}

然后这样调用qsort:
char *strings[MAXNUMS];
/*赋值*/
qsort(strings, MAXNUMS, sizeof(char *),mystrcmp);

注意,在此例中qsort只是交换strings数组中各元素的位置

如果你看不懂语法的话,Hi我

热心网友 时间:2023-05-02 00:41

1.a中存放的指针所指向的字符串与b中存放的指针所指向的字符串进行比较
2。a指向的字符串与b指向的字符串比较
3。 a指向的字符与b指向的字符比较
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
空调加氟时要注意什么? 电脑安装了pr兼容性pr显示系统兼容性报告 带你了解——赫伯罗特 一千克面粉三十元一克面粉多少钱 大米2元500克面粉3元500克 2千克大米和和1500克面粉多少钱?_百度... ...面粉每千克多少元.大米25千克4.5元一千克面粉2 买8000克面粉需要32元,每千克面粉多少钱 500克面粉2元钱1千克面粉多少钱,怎么练式? 软棕和硬棕哪个好 amd rx6800m相当于nvidia什么水平? 《王的女人》男一号是谁?女一号是谁? 新买oppor7再无线的状态下接信息延迟是怎么回事 王者荣耀S9成吉思汗怎么玩 各位大虾,帮我分析下这个宅第联:横批:微熙居;上联:微意持家思俭德;下联:熙洽宜室瞻远景 熙洽的历史评价 爱新觉罗·熙洽的生平 爱新觉罗·熙洽的介绍 熙洽[xī qià]什么意思?近义词和反义词是什么?英文翻译是什么? 、东风过,天转凉,红叶落斜阳意思 三星s22怎么关机的呢? 怎么在网易博客添加一个显示来访者IP的东西....显示对方是哪个省哪个市的. 匿名登录的也有显示.. 怎样在博客上记录来访者ip及页面?并能显示访客页面,我浏览了这个博客,就留下我的博客名,并点击进去回访. 怎么在网易博客里显示访客IP地址 0分 如何在博客当中加入能够识别来访者的IP 脸上有长痘痘留下的凹痕,该怎么办 花菜如何做简单家常好吃呢花菜的家常煮法 《潇湘》是什么意思啊? 农村医保今年一个人看门诊报消了三四百元后县医院说全家谁看门诊都没有报消了,要今年医保过了再买才 缓者朝发夕死,重者顷刻而亡是什么意思 熙颜这个名字好不好它的意义? c语言:strcmp在二维数组中应该怎么用? C语言 求字符数组的排序 在c语言中我想对汉字字符串按拼音进行排序,可以直接利用strcmp函数来进行排序吗 梦见一条清彻河水 素问:冬伤于寒,春必病温 冬伤于寒,春必温病 冬伤于寒,春必病温 图怪兽下载的图片保存在哪里 夕日难得醉日日,桥头与君一只浊泪这代表什么意思 春季花开花满地,残阳西下夕日辉。散尽繁花三千丝,此缘待生方可为。这首诗是什么意思 微信注销了支付,怎么开通 梦见房间两张床的预兆 梦见一个房间有二张床 梦见屋里两张床的预兆 溪堂的解释 梦见昨天老公剃光了头发的预兆 梦见老公给女人剃光头我哭了的预兆 9个月宝宝可以吃鱼肉吗 前几天看篆刻字有“瓜李故乡盐梅旧族,糟糠残梦鸱夷前身”一句。是什么意思?有何出处? 外篇的国语词典外篇的国语词典是什么