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
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值,两者是匹配的.
至于楼主的问题,我没调试过,不好说.
[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
以下是引用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值,两者是匹配的.
至于楼主的问题,我没调试过,不好说.
你自己试试就知道了撒!!两个指针不匹配,!!