请问qsort 中比较函数的写法

请教qsort 中比较函数的写法
#include <iostream.h> 
#include <stdlib.h> 
#include <string.h> 

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

char* list[5]={"cattle","car","cabet","cap","canon"}; 

void main() 

//cout<<sizeof(list[2]); 
qsort((void *)list,5,sizeof(list[0]),compare); 
for(int i=0; i<5; i++) 
cout <<list[i] <<endl; 


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

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


为什么将return strcmp(*(char**)a, *(char**)b); 改成
return strcmp ((char*)a,(char *)b);就不行了呢?


------解决方案--------------------
return strcmp ((char*)a,(char *)b);就不行了呢? 
这样只是把a,b转化了指向char的指针,但是这里应该是指向字符串的指针才对。
定义char* list[5]={"cattle","car","cabet","cap","canon"}; 
每个数组的元素都是一个字符串。
楼主可以msdn一下。
------解决方案--------------------
strcmp需要的是两个字符指针参数, 因为a,b是二级指针,但是主函数传过来的是空指针,所以首先要转换为二级指针,然后在转换为一级指针, strcmp(*(char**)a, *(char**)b);是正确的
------解决方案--------------------
msdn查一下就知道了

// crt_qsort.c
// arguments: every good boy deserves favor

/* 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 );

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 );
}