“char *()”与“int ()”的间接寻址级别不同,明白的告诉小弟我一上上吧,到底咋事儿,多谢了

“char *()”与“int ()”的间接寻址级别不同,明白的告诉我一下下吧,到底咋事儿,谢谢了
char *cellsub_cpuname( cpu )
long cpu;
{
struct hostent *host;

static char name[ 20 ];
unsigned char mm,nn,xx,yy;

if(( host = ( struct hostent * )gethostbyaddr( &cpu, sizeof( cpu ),
AF_INET )) != 0 ){
strcpy( name, host->h_name );
return name;
}
mm = ( cpu >> (( sizeof( long ) - 1 ) * 8 )) & 0xff;
nn = ( cpu >> (( sizeof( long ) - 2 ) * 8 )) & 0xff;
xx = ( cpu >> (( sizeof( long ) - 3 ) * 8 )) & 0xff;
yy = ( cpu >> (( sizeof( long ) - 4 ) * 8 )) & 0xff;
sprintf( name, "%d.%d.%d.%d", mm, nn, xx, yy );
return name;
}


提示错误:
error C2040: “cellsub_cpuname”: “char *()”与“int ()”的间接寻址级别不同

------解决方案--------------------
char指针和long整数不能隐式转换,其实就是参数类型不匹配

另外,你这种K&R风格的古董C是从哪里学的,换本书来看
------解决方案--------------------
间接寻址级别不同

原文是什么?
------解决方案--------------------
这段代码虽然古老,但是没什么问题的,不知为何你会编译不过。