当前位置: 代码迷 >> C语言 >> 关于函数指针变量
  详细解决方案

关于函数指针变量

热度:123   发布时间:2007-08-11 18:54:40.0
关于函数指针变量

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 为什么?

搜索更多相关的解决方案: float  变量  指针  函数  swap  

----------------解决方案--------------------------------------------------------
以下是引用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 为什么?


----------------解决方案--------------------------------------------------------

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

}
那我就明白..为什么..这个可以? 能否解释下?


----------------解决方案--------------------------------------------------------
以下是引用y218z903在2007-8-11 19:27:50的发言:

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

[/QUOTE]
----------------解决方案--------------------------------------------------------

汗死...我只是刚学不久,,那知道这么多的标准啊...


----------------解决方案--------------------------------------------------------

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


----------------解决方案--------------------------------------------------------
以下是引用jackys2006在2007-8-11 20:09:29的发言:

以下是引用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值,两者是匹配的.

至于楼主的问题,我没调试过,不好说.

你自己试试就知道了撒!!两个指针不匹配,!!
----------------解决方案--------------------------------------------------------

  相关解决方案