int compare( const void *arg1, const void *arg2 ) { /* Compare all of both st

r11222 2010-05-10 03:00:24
int compare( const void *arg1, const void *arg2 )
{
/* Compare all of both strings: */
return _stricmp(, * ( char** ) arg2 );
}


MSDN 上的一段程序

这里


* ( char** ) arg1


为什么要这样?跟(char*)arg1 有什么不同???
...全文
168 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
poinsettia 2012-09-17
  • 打赏
  • 举报
回复
求楼主解答,这么做的目的是什么?为什么不直接定义int compare( const char *arg1, const char *arg2 ) ,这样是不是后面就不用类似于_stricmp( * ( char** ) arg1, * ( char** ) arg2 ); 的类型转换了
r11222 2010-05-10
  • 打赏
  • 举报
回复
自己看明白了,呵呵 结贴
wade_2003 2010-05-10
  • 打赏
  • 举报
回复
贵在参与
r11222 2010-05-10
  • 打赏
  • 举报
回复
关键是这样做有何意义?????
r11222 2010-05-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hai040 的回复:]

(char*)arg1 是把arg1当成char*
* ( char** ) arg1是把arg1当成char**,它传过去的是*arg1
[/Quote]
不明白
求解

赵4老师 2010-05-10
  • 打赏
  • 举报
回复
/* QSORT.C: This program reads the command-line
* parameters and uses qsort to sort them. It
* then displays the sorted arguments.
*/

#include <stdlib.h>
#include <string.h>
#include <stdio.h>

int compare( const void *arg1, const void *arg2 );

void main( int argc, char **argv )
{
int i;
/* Eliminate argv[0] from sort: */
argv++;
argc--;

/* Sort remaining args using Quicksort algorithm: */
qsort( (void *)argv, (size_t)argc, sizeof( char * ), compare );

/* Output sorted list: */
for( i = 0; i < argc; ++i )
printf( "%s ", argv[i] );
printf( "\n" );
}

int compare( const void *arg1, const void *arg2 )
{
/* Compare all of both strings: */
return _stricmp( * ( char** ) arg1, * ( char** ) arg2 );
}


赵4老师 2010-05-10
  • 打赏
  • 举报
回复
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
herman~~ 2010-05-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hai040 的回复:]
(char*)arg1 是把arg1当成char*
* ( char** ) arg1是把arg1当成char**,它传过去的是*arg1
[/Quote]

正解...
hai040 2010-05-10
  • 打赏
  • 举报
回复
(char*)arg1 是把arg1当成char*
* ( char** ) arg1是把arg1当成char**,它传过去的是*arg1
_JeffreyWu 2010-05-10
  • 打赏
  • 举报
回复
不知,(char *)arg2 也可以编译通过的
等高手解释

64,682

社区成员

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

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