c中的qsort
为什么其中的Comp函数传递的值是两个Constvoid*呢?能不能用void*?谢谢,求解释恩~编译器报错,我用的是codeblocks...
为什么其中的Comp函数传递的值是两个Const void*呢?能不能用void*?谢谢,求解释
恩~编译器报错,我用的是codeblocks 展开
恩~编译器报错,我用的是codeblocks 展开
1个回答
展开全部
那个是一个函数地址来的
属于回调函数!具体用法如下:(取自MSDN)
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
int compare( const void *arg1, const void *arg2 );
int 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 );
}
const是防止参数传进去之后,无意被修改而导致程序结果出错.(在这里)
const 它限定一个变量不允许被改变
属于回调函数!具体用法如下:(取自MSDN)
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
int compare( const void *arg1, const void *arg2 );
int 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 );
}
const是防止参数传进去之后,无意被修改而导致程序结果出错.(在这里)
const 它限定一个变量不允许被改变
追问
编译器在你用void变量的时候会报错,难道仅仅只是因为这个原因?”无意被修改而导致程序结果出错“?
追答
void 变量不能别编译器自动转换为const void
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询