| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4855 人关注过本帖
标题:怎么确定函数的返回值?
只看楼主 加入收藏
aaaasix
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2007-6-10
收藏
 问题点数:0 回复次数:8 
怎么确定函数的返回值?
就像:
void f (int x, int y)
{ int t;
if(x<y){ t=x;y=x;y=t;}
}
main()
{ int a=4,b=3,c=5;
f(a,b); f(a,c); f(b,c);
printf("%d,%d,%d\n,a,b,c);
}
他说算出来结果是:4,3,5
就是因为调用函数没起到作用!
是不是VOID定义的就没有返回值?而其它像INT,CHAR定义的就有返回值?
如果要想让这个程序有返回值!那怎样改呢?
还有啊,函数的返回值是怎么返回去的?这个问题最复杂!
望高手不吝赐教!

搜索更多相关主题的帖子: 返回值 函数 
2007-06-28 00:48
huangfengchu
Rank: 1
等 级:新手上路
威 望:2
帖 子:274
专家分:0
注 册:2007-5-22
收藏
得分:0 

void就是说明该函数不返回任何值,一般函数只返回一个值,你这个只要把函数声明为int f(int x,int y)就行,返回函数值时
int f (int x, int y)
{ int t;
if(x<y){ t=x;y=x;y=t;}
return t;
}
这样就可以。


深山苦学C语言,终年不见外面世界。
2007-06-28 01:47
cinsin
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2007-6-25
收藏
得分:0 
以下是引用aaaasix在2007-6-28 0:48:46的发言:
就像:
void f (int x, int y)
{ int t;
if(x<y){ t=x;y=x;y=t;}
}
main()
{ int a=4,b=3,c=5;
f(a,b); f(a,c); f(b,c);
printf("%d,%d,%d\n,a,b,c);
}
他说算出来结果是:4,3,5
就是因为调用函数没起到作用!
是不是VOID定义的就没有返回值?而其它像INT,CHAR定义的就有返回值?
如果要想让这个程序有返回值!那怎样改呢?
还有啊,函数的返回值是怎么返回去的?这个问题最复杂!
望高手不吝赐教!

就是没起到作用,但是实际上你却调用了。这个问题很典型,当你引用f(a,b)的时候,a和b的值分别传个x和y。然后在f()函数里按条件交换或者不交换x和y的值.这里,有没有交换x,y的值和a,b已经没有关系了,x,y和a,b的内存单元完全没有关系.所以在main函数执行完后没有起到预期的结果.
如果在f()函数里用两个指针*x和*y做参数:
void f (int *x, int *y)
{ int t; /*如果调用的是f(a,b)的话,则*x和a是等价的,*y和b是等价的.这样才真正改变了a,b.*/
if(*x<*y){ t=*x;*y=*x;*y=t;}
}
这个程序是不需要返回值的.只是对变量之间进行值的替换,并不需要返回值.
关于函数返回值的问题建议你看看课本,课本上有很详细的说明,在这里就不多说了.


曾几何时,我也是菜鸟...
2007-06-28 02:00
夜中梦
Rank: 1
等 级:新手上路
帖 子:132
专家分:0
注 册:2007-5-12
收藏
得分:0 

楼上很对,顶


2007-06-28 07:04
huangfengchu
Rank: 1
等 级:新手上路
威 望:2
帖 子:274
专家分:0
注 册:2007-5-22
收藏
得分:0 
楼上好象不根据人家现在知识来解答,他才学函数,你用指针去叫他理解,而不说怎么样去返回值,他肯定理解不了。

深山苦学C语言,终年不见外面世界。
2007-06-28 08:59
huangfengchu
Rank: 1
等 级:新手上路
威 望:2
帖 子:274
专家分:0
注 册:2007-5-22
收藏
得分:0 
不好意思,在二楼解释有误,没注意看程序,你是要在该函数中交换两个值再返回两值,用int返回错误,用void没错,主要是你调用一次就输出一次,或者先保存起来,最后输出。

深山苦学C语言,终年不见外面世界。
2007-06-28 11:41
aaaasix
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2007-6-10
收藏
得分:0 
引用三楼的高手:
就是没起到作用,但是实际上你却调用了。这个问题很典型,当你引用f(a,b)的时候,a和b的值分别传个x和y。然后在f()函数里按条件交换或者不交换x和y的值.这里,有没有交换x,y的值和a,b已经没有关系了,x,y和a,b的内存单元完全没有关系.所以在main函数执行完后没有起到预期的结果.
如果在f()函数里用两个指针*x和*y做参数:
void f (int *x, int *y)
{ int t; /*如果调用的是f(a,b)的话,则*x和a是等价的,*y和b是等价的.这样才真正改变了a,b.*/
if(*x<*y){ t=*x;*y=*x;*y=t;}
}
这个程序是不需要返回值的.只是对变量之间进行值的替换,并不需要返回值.
关于函数返回值的问题建议你看看课本,课本上有很详细的说明,在这里就不多说了.

不好意思,我悟性不是那么的好!
不过真的照你这样说,有几点反而晕了!
第一句: "有没有交换x,y的值和a,b已经没有关系了"
我的疑问是:你怎么知道它们之间没有关系?怎么判断?为什么把函数形参换成指针,就有关系了?
第二句: "这个程序是不需要返回值的.只是对变量之间进行值的替换,并不需要返回值"
我想你的意思是:这个程序没有返任何东西回去的功能吧?要不然,如果还有无需返回的调用,那又何需调用?
不好意思,是不是有点乱?
还有啊!你说这个程序只是对变量之间进行值的替换!我一直以为:函数的返回值就是调用函数的结果!
不知道这样认为有没有错!如果没错的话!那么在这个程序中,明明把变量的值交换了,也就是说调用这
个函数已经有了结果!问题就出在这里!为什么主程序不知道这个结果!

所以啊,说了这么多,就是一个主题问题:怎么确定函数有没有返回值?
怎么返回就不用了,书上说了主要有三种形式:RETURN和形参->实参和全局变量
虽然不大懂,但这暂时不搭界!
2007-06-28 13:22
cihren
Rank: 1
等 级:新手上路
帖 子:76
专家分:0
注 册:2007-6-27
收藏
得分:0 

这是C语言参数单向传递的问题,看一书就好了,不难理解


革命尚未成功,同志仍需努力!
2007-06-28 13:27
baiyyddd
Rank: 2
来 自:江苏
等 级:论坛游民
帖 子:33
专家分:61
注 册:2010-5-10
收藏
得分:0 
函数不改变实参的值,只是对实参的拷贝!指针传递是一个地址,你可以放给一个值
2010-06-02 13:30
快速回复:怎么确定函数的返回值?
数据加载中...
 
   



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

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