| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 935 人关注过本帖
标题:关于函数指针变量
只看楼主 加入收藏
y218z903
Rank: 1
等 级:新手上路
帖 子:63
专家分:0
注 册:2007-7-27
收藏
 问题点数:0 回复次数:13 
关于函数指针变量

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 
2007-08-11 18:54
viky2003
Rank: 5Rank: 5
等 级:职业侠客
帖 子:375
专家分:383
注 册:2007-4-11
收藏
得分: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 为什么?


要练习算法就来http:///!!有挑战哦!!
2007-08-11 19:13
y218z903
Rank: 1
等 级:新手上路
帖 子:63
专家分:0
注 册:2007-7-27
收藏
得分:0 

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

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


2007-08-11 19:27
viky2003
Rank: 5Rank: 5
等 级:职业侠客
帖 子:375
专家分:383
注 册:2007-4-11
收藏
得分:0 
以下是引用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;
那我就明白..为什么..这个可以? 能否解释下?

你编译过没有??用的什么编译器啊!!


要练习算法就来http:///!!有挑战哦!!
2007-08-11 19:56
jackys2006
Rank: 1
等 级:新手上路
帖 子:195
专家分:0
注 册:2006-3-10
收藏
得分: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值,两者是匹配的.

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


2007-08-11 20:09
y218z903
Rank: 1
等 级:新手上路
帖 子:63
专家分:0
注 册:2007-7-27
收藏
得分:0 
当然编译过...int 的例题...至于float 是我自己改的...

2007-08-11 20:16
戒不掉
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2007-8-11
收藏
得分:0 

[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]

2007-08-11 20:24
y218z903
Rank: 1
等 级:新手上路
帖 子:63
专家分:0
注 册:2007-7-27
收藏
得分:0 

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


2007-08-11 20:31
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
收藏
得分:0 

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

2007-08-11 20:38
viky2003
Rank: 5Rank: 5
等 级:职业侠客
帖 子:375
专家分:383
注 册:2007-4-11
收藏
得分:0 
以下是引用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值,两者是匹配的.

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

你自己试试就知道了撒!!两个指针不匹配,!!


要练习算法就来http:///!!有挑战哦!!
2007-08-11 20:47
快速回复:关于函数指针变量
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.049315 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved