main()
{
float (*p)();
float swap(float ,float);
float k;
p=swap;
k=(*p)(3.0,10.0);
printf("%f",k);
}
float swap(float a,float b)
{
return (a>b)?a:b;
} 答案竟然是2.125000 为什么?
----------------解决方案--------------------------------------------------------
main()
{
float (*p)();
float swap(float ,float);
float k;
p=swap;-------------这都能通过编译....!服了 !!两个类型不同的指针都可以赋值 !!
k=(*p)(3.0,10.0);
printf("%f",k);
}
float swap(float a,float b)
{
return (a>b)?a:b;
} 答案竟然是2.125000 为什么?
----------------解决方案--------------------------------------------------------
int max(int a,int b){
if(a>b)return a;
else return b;
}
main(){
int max(int a,int b);
int(*pmax)();
int x,y,z;
pmax=max;
printf("input two numbers:\n");
scanf("%d%d",&x,&y);
z=(*pmax)(x,y);
printf("maxmum=%d",z);
}
那我就明白..为什么..这个可以? 能否解释下?
----------------解决方案--------------------------------------------------------
int max(int a,int b){
if(a>b)return a;
else return b;
}
main(){------------------前面应该声明 为int
int max(int a,int b);
int(*pmax)();-------------应该声明成int(*pmax)(int,int)
int x,y,z;
pmax=max;
printf("input two numbers:\n");
scanf("%d%d",&x,&y);
z=(*pmax)(x,y);-------------也可以写成pmax(x,y)你的也可以!
printf("maxmum=%d",z);
} --------------------------最后return 0;
那我就明白..为什么..这个可以? 能否解释下?
你编译过没有??用的什么编译器啊!!
----------------解决方案--------------------------------------------------------
以下是引用y218z903在2007-8-11 18:54:40的发言:
main()
{
float (*p)();
float swap(float ,float);
float k;
p=swap;-------------这都能通过编译....!服了 !!两个类型不同的指针都可以赋值 !!
k=(*p)(3.0,10.0);
printf("%f",k);
}
float swap(float a,float b)
{
return (a>b)?a:b;
} 答案竟然是2.125000 为什么?
当然可以!
swap(float ,float); 是一个函数,swap是它的函数名,和数组一样,函数名也是这个函数的地址.而且这个函数的返回值是一个float值,两者是匹配的.
至于楼主的问题,我没调试过,不好说.
----------------解决方案--------------------------------------------------------
当然编译过...int 的例题...至于float 是我自己改的...
----------------解决方案--------------------------------------------------------
[QUOTE]
int max(int a,int b){
if(a>b)return a;
else return b;
}
main(){------------------前面应该声明 为int //没必要非要加int,不加是K&R标准,加了是ANSI C 标准
int max(int a,int b);
int(*pmax)();-------------应该声明成int(*pmax)(int,int)
int x,y,z;
pmax=max;
printf("input two numbers:\n");
scanf("%d%d",&x,&y);
z=(*pmax)(x,y);//AT&T标准 pmax(x,y)//Berkeley标准
printf("maxmum=%d",z);
} --------------------------最后return 0; // 同int配对,加了int就应该return
float (*p)(float,float); 函数指针也要加参数,有的编译器空括号表示void,有的表示int
----------------解决方案--------------------------------------------------------
汗死...我只是刚学不久,,那知道这么多的标准啊...
----------------解决方案--------------------------------------------------------
float (*p)();
float swap(float ,float);
float k;
p=swap;
k=(*p)(3.0,10.0);
这种写法错误很严重,首先,3.0,10.0都是double类型,和float (*p)()类型不匹配
float (*p)()在C里表示可以接收任意个数的参数,并且不进行检查,于是结果不确定
如果要改,那就是:
float *p(float,float);
k=p(3.0f,10.0f);
----------------解决方案--------------------------------------------------------
以下是引用y218z903在2007-8-11 18:54:40的发言:
main()
{
float (*p)();
float swap(float ,float);
float k;
p=swap;-------------这都能通过编译....!服了 !!两个类型不同的指针都可以赋值 !!
k=(*p)(3.0,10.0);
printf("%f",k);
}
float swap(float a,float b)
{
return (a>b)?a:b;
} 答案竟然是2.125000 为什么?
当然可以!
swap(float ,float); 是一个函数,swap是它的函数名,和数组一样,函数名也是这个函数的地址.而且这个函数的返回值是一个float值,两者是匹配的.
至于楼主的问题,我没调试过,不好说.
你自己试试就知道了撒!!两个指针不匹配,!!
----------------解决方案--------------------------------------------------------