来源:蜘蛛抓取(WebSpider)
时间:2016-11-18 01:34
标签:
有返回值的函数调用
请问高手们,在wintc中如何才能在一个函数中只得到另一个函数的返回值,而不需要执行该函数的内容呢?-学网-中国IT综合门户网站-提供健康,养生,留学,移民,创业,汽车等信息
> 信息中心 >
请问高手们,在wintc中如何才能在一个函数中只得到另一个函数的返回值,而不需要执行该函数的内容呢?
来源:互联网 发表时间: 19:08:35 责任编辑:李志喜字体:
为了帮助网友解决“请问高手们,在wintc中如何才能在一个函数中只得到另一个函数的返回值,而不需要执行该函数的内容呢?”相关的问题,学网通过互联网对“请问高手们,在wintc中如何才能在一个函数中只得到另一个函数的返回值,而不需要执行该函数的内容呢?”相关的解决方案进行了整理,用户详细问题包括:RT,我想知道:请问高手们,在wintc中如何才能在一个函数中只得到另一个函数的返回值,而不需要执行该函数的内容呢?,具体解决方案如下:解决方案1:不管在哪写C的程序,C语言中返回值都是通过return语句返回的
1个回答1个回答1个回答1个回答1个回答1个回答1个回答1个回答1个回答
相关文章:
<a href="/cse/search?q=<inputclass="s-btn"type="submit"text="<inputclass="s-btn"type="submit"text="<buttonhidefocusclass="s-btnjs-ask-btn"text="我要提问
<a href="/cse/search?q=共有 14755 人关注过本帖
标题:一个函数怎么可以有多个返回值
来 自:江西奉新
等 级:论坛游侠
帖 子:114
专家分:105
结帖率:100%
&&问题点数:0&&回复次数:8&&&
一个函数怎么可以有多个返回值
就是回复多个值…一个return只能返回一个值…怎么可以返回多个值…就是调用一个函数想把其中两个同时成立的值输出…
搜索更多相关主题的帖子:
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
那是C语言的规定, 一个函数只许有一个返回值
善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
等 级:蝙蝠侠
帖 子:309
专家分:913
可以利用全局变量或数组参数或指针参数,从函数返回多个值。
等 级:新手上路
C语言中return只能有0个或者1个返回值!
等 级:论坛游民
帖 子:19
专家分:15
返回值只能有一个,但可以用指针得出多个函数中的数据!
来 自:江西奉新
等 级:论坛游侠
帖 子:114
专家分:105
好吧………知道了…………谢了…
一个人能有多坚强,太安静,就成了孤单。
等 级:论坛游民
帖 子:77
专家分:32
#include &stdio.h&
zmn(int h,int k,int *sum,int *dif);
void main()
&&& int x=2,y=1,a,d;
&&& zmn(x,y,&a,&d);
&&& printf(&a=%d\n,d=%d\n&,a,d);
zmn(int h,int k,int *sum,int *dif)
&&& *sum=h+k;
&&& *dif=h-k;
等 级:新手上路
函数的调用只能一个返回值,有时可以利用全局变量增加与函数联系的渠道,从函数得到一个以上的返回值。
等 级:论坛游民
帖 子:34
专家分:28
数组,指针和堆内存的应用
版权所有,并保留所有权利。
Powered by , Processed in 0.024547 second(s), 8 queries.
Copyright&, BCCN.NET, All Rights Reserved2008年1月 总版技术专家分月排行榜第三
2008年1月 VC/MFC大版内专家分月排行榜第一2007年12月 VC/MFC大版内专家分月排行榜第一
2010年7月 荣获微软MVP称号2005年7月 荣获微软MVP称号2006年7月 荣获微软MVP称号
2010年1月 VC/MFC大版内专家分月排行榜第一2004年4月 VC/MFC大版内专家分月排行榜第一
2009年 总版技术专家分年内排行榜第四
2009年2月 总版技术专家分月排行榜第一2009年1月 总版技术专家分月排行榜第一2008年11月 总版技术专家分月排行榜第一2008年10月 总版技术专家分月排行榜第一2008年9月 总版技术专家分月排行榜第一2008年8月 总版技术专家分月排行榜第一2008年7月 总版技术专家分月排行榜第一2008年6月 总版技术专家分月排行榜第一2008年5月 总版技术专家分月排行榜第一2008年4月 总版技术专家分月排行榜第一
2009年 总版技术专家分年内排行榜第四
2009年2月 总版技术专家分月排行榜第一2009年1月 总版技术专家分月排行榜第一2008年11月 总版技术专家分月排行榜第一2008年10月 总版技术专家分月排行榜第一2008年9月 总版技术专家分月排行榜第一2008年8月 总版技术专家分月排行榜第一2008年7月 总版技术专家分月排行榜第一2008年6月 总版技术专家分月排行榜第一2008年5月 总版技术专家分月排行榜第一2008年4月 总版技术专家分月排行榜第一
本帖子已过去太久远了,不再提供回复功能。18661人阅读
C语言知识(37)
笔者从事C语言教学多年,在教学中学生们常常会问到如何编写具有多个返回值的C语言函数。编写有多个返回值的函数是所有C语言教材里均没有提到的知识点,但在实际教学与应用的过程中我们都有可能会遇到这样的问题。有学生也尝试了不少方法:如把多个需要返回的值作相应的处理后变成一个可以用return语句返回的数据,再在主调函数中拆开返回的数据使之变成几个值;或者把需要返回多个值的一个函数分开几个函数去实现多个值的返回。这些方法虽然最终都能实现返回要求的多个值,但从程序算法的合理性与最优化方面去考虑,显然不理想。我们知道C语言函数的返回值是通过函数中的return语句来实现的,可是每调用一次函数,return语句只能返回一个值。那么当我们希望从一个函数中返回多个值时,用什么方法去实现比较合理呢?在教学过程中,我建议学生跳出对return语句的定势思维,一步步引导学生通过几种间接方式实现多个返回值的C语言函数。以下是笔者在教学过程中引导学生采用的三种不同方法编写多个返回值的C语言函数。
2方法1:利用全局变量
分析:全局变量作为C语言的一个知识点,虽然我们都了解它的特点,但在实际教学过程中应用得并不是很多。由于全局变量的作用域是从定义变量开始直到程序结束,而对于编写有多个返回值的C语言函数,我们可以考虑把要返回的多个值定义成全局变量。当函数被调用时,全局变量被更改,我们再把更改后的全局变量值应用于主调函数中。函数被调用后被更改后的全局变量值即为函数的数个返回值。下面以一个实例演示该方法的应用。
实例1:编写函数求3个数中的最大值与最小值。
方法:把最大值、最小值分别定义成2个全局变量max、min,在用户自定义函数中把求出来的最大值与最小值分别赋给全局变量max、min。函数调用完毕后全局变量的max、min值即保存了函数要求返回的值。程序参考代码如下:
#include &stdio.h&
#include &conio.h&
int max,/*定义两个全局变量用于保存函数返回值*/
void max_min(int a,int b,int c) /*定义求最大最小值的函数*/
{max=min=a; /*初始化最大最小值*/
if(max if(max if(min&b)min=b;
if(min&c)min=c;
main()
{int x,y,z;
printf(& 请输入3个整数:\n&);
scanf(&%d,%d,%d&,&x,&y,&z);
max_min(x,y,z) ;/*调用求最大值与最小值的函数*/
printf(&三个数中的最大值为:%d;最小值为:%d&,max,min);/*输出最大值与最小值*/
getch();
调试结果如下:
请输入3个整数:
5,-6,2
三个数中的最大值为:5;最小值为:-6
注意:该方法虽然可以实现有多个返回值的函数,但由于全局变量不能保证值的正确性(因为其作用域是全局,所以程序范围内都可以修改它的值,如果出现错误将非常难以发现),并且全局变量增加了程序间模块的耦合,所以该方法要慎用。
3方法2:传递数组指针
分析:在教学过程中,我们知道C语言函数参数的传递方式有值传递与地址传递。当进行值传递时,主调函数把实参的值复制给形参,形参获得从主调函数传递过来的值运行函数。在值传递过程中被调函数参数值的更改不能导致实参值的更改。而如果是地址传递,由于传递过程中从实参传递过来的是地址,所以被调函数中形参值的更改会直接导致实参值的更改。因此,我们可以考虑把多个返回值作为数组元素定义成一个数组的形式,并使该数组的地址作为函数的形式参数,以传址方式传递数组参数。函数被调用后,形参数组元素改变导致实参改变,我们再从改变后的实参数组元素中获得函数的多个返回值。以下实例演示该方法的应用。
实例2:编写函数求一维整形数组的最大值与最小值,并把最大值与最小值返回给主调函数。
方法:以指针方式传递该一维数组的地址,然后把数组的最大值与数组的第一个元素交换,把数组的最小值与最后一个元素交换。函数被调用完毕后,实参数组中的第一元素为数组的最大值,实参数组中最后一个元素为数组的最小值,从而实现返回数组的最大值与最小值的功能。程序参考代码如下:
#include &stdio.h&
#include &conio.h&
void max_min(int *ptr,int n) /*定义求数组最大值最小值的函数,传递数组指针*/
{int i,j,k;/*j保存最大值所在位置,k保存最小值所在位置*/
int */*用于交换位置*/
*temp=*
for(i=0;i {
if(*ptr&*(ptr+i))/*最大值与第一个元素进行交换*/
*temp=*
*ptr=*(ptr+k);
*(ptr+k)=*
if(*(ptr+n-1)&*(ptr+i))/*最小值与最后一个元素进行交换*/
*temp =*(ptr+n-1);
*(ptr+n-1)=*(ptr+j);
*(ptr+j)= *}
/*调用最大最小值函数*/
main()
int A[6],i;
for(i=0;i&6;i++)
scanf(&%d&,&A[i]);
max_min(A,6);
printf(&max=%d, min=%d\n \n&,A[0],A[5]);
getch();
调试结果如下:
请输入6个整形数,以空格隔开:
5 8 9 32 -6 4
max=32,min=-6
注意:该方法适用于多个返回值的数据类型一致的情况。当返回值数据类型不一致时,不适用该方法。
4方法3:传递结构体指针
分析:结构体作为教学中的一个难点,教材对它介绍的内容并不多,应用的实例更是少之又少,所以学生对于结构体普遍掌握情况不理想。其实,编写返回多个值的C语言函数,也可以考虑采用结构体的方式去实现。通过方法2,我们知道如果返回的数个数值的数据类型不一致,可以通过定义全局变量实现有多个返回值的C语言函数,也可以考虑把要求返回的数个值定义成一个结构体,然后同样以传递结构体指针方式把结构体的指针传递给形参结构体指针,那么函数中对形参结构体的修改即是对实参结构体的修改,函数被调用后获取的实参结构体成员即为函数的多个返回值,下面以实例演示该方法的应用。
实例3:编写一个用户自定义函数,允许用户录入学生的基本信息(包括学号、姓名、所属班级、总评成绩),并返回这些基本信息给主调函数。
方法:把学生基本信息定义成一个结构体,在用户自定义函数中传递该结构体的指针,则自定义函数中对结构体成员的录入操作即是对实参结构体成员的录入操作,从而实现多个返回值。参考代码如下:
#include &stdio.h&
#include &conio.h&
struct inf{/*定义学生结构体,分别包含成员学号、姓名、班别、总评成绩*/
char xh[12];
char name[20];
char class[15];
main(void)
struct inf a1; /*定义学生结构体类型变量*/
void xxxx(struct inf *ptr);
printf(&请输入学号,姓名,班别,总评成绩,以空格隔开:\n&) ;
xxxx(&a1);/*调用函数,以学生结构体类型变量地址作为实参*/
printf(&学号:%s,姓名: %s,班别:%s,总评成绩:%d&,a1.xh, a1.name,a1.class,a1.chj);
getch();
void xxxx(struct inf *ptr)/*该函数实现对结构体成员数据的录入操作*/
char xh1[12],name1[20],class1[15];
int chj1;
scanf(&%s%s%s%d&,xh1,name1,class1,&chj1);
strcpy(ptr-&xh,xh1);
strcpy(ptr-&name,name1);
strcpy(ptr-&class,class1);
ptr-&chj=chj1;
调试结果如下:
请输入学号,姓名,班别,总评成绩,以空格隔开:
200102LiLi200185
学号:200102,姓名: LiLi,班别:2001,总评成绩:85
注意:当函数要求返回的多个值是相互联系的或者返回的多个值数据类型不一致时可以采用该方法。
5结束语
对于以上这三种方法,如果想要返回的数个值数据类型一致,可以考虑采用方法2;而对于不同数据类型的返回值,如果各个数值之间是相互联系的,则方法3较为合适;方法1虽然在很多情况下都可以实现多个返回值的C语言函数,但毕竟全局变量应用过程中有很多危险,要慎重使用。
通过对以上几种方法的分析讲解,在教学过程中,学生再遇到这样的问题时,就能根据返回值的情况选择合适的途径去实现多个返回值的C语言函数。另外,如果再遇到类似的无法用教材知识点去直接解决的问题时,他们基本都能举一反三地尝试采用间接方式去解决。
参考文献
[1] 谭浩强. C程序设计(第二版)[M]. 北京:清华大学出版社,1999.
[2] 薛万鹏译. C程序设计教程[M]. 北京:机械工业出版社,2000.
[3] 邓劲生译. Visual C++程序员实用大全[M]. 北京:中国水利水电出版社,2005.
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:319588次
积分:3464
积分:3464
排名:第7244名
原创:15篇
转载:135篇
评论:41条
(8)(2)(5)(9)(4)(20)(15)(32)(9)(2)(7)(5)(10)(22)