24小时热门版块排行榜    

查看: 4710  |  回复: 19
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

东山

木虫 (正式写手)


[交流] 一种函数多个返回值的方法,大家探讨一下可行性吧

原文地址http://anony3721.blog.163.com/blog/static/511974201072984326889/

在C中,正常情况下,我们只能从函数中返回一个值。但在很多情况下,我们需要从函数中返回多个值,此时使用数组或指针能够很好地完成这样的任务。这里是一个示例。这个程序使用一个整型数组作为参数,并将数组元素的和与积返回给调用函数。下面是C代码,这是一种常见情况。下面给出实现技巧:

#include
#include
int* Pool(int array[],int size)  
{  
   int *x;  
   int i=0;  
   int a[2]={0,1};  
   for(i=0;i    {  
      a[0]+=array;                       //存储数组元素值的和  
      a[1]*=array;                       //存储数组元素值的积  
   }  
   //将数组的基地址赋值给整型指针  
   x=&a[0];  
   //返回整个数组  
   return x;  
}  

int main()  
{  
   int a[]={1,2,3,4};  
   int *c; c = Pool(a,4);  
   printf("Sum = %d\nProduct = %d\n",c[0],c[1]);  
   getch();  
   return 0;  
}


有一个问题是数组a[2]是局部变量,其地址是否还能返回
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

» 抢金币啦!回帖就可以得到:

查看全部散金贴

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ElysiumF8

新虫 (初入文坛)


★ ★
小木虫: 金币+0.5, 给个红包,谢谢回帖
jjdg: 金币+1, 感谢参与 2013-09-01 00:49:40
函数体中定义数组并返回时毫无意义的,函数的调用时在栈空间上进行的,而栈上的内容会随着函数执行的结束被释放,企图返回一个已经被释放了的对象是严重的错误。如果你非要这么做,这个数组的首地址应当是被new出来的,因为这样它就被存在了堆空间上,不会随着函数执行结束而被销毁,但是这样的另一个缺点就是new出来的不会自动释放,必须在后续代码中使用delete释放。在effective C++里Scot就明确指出不要试图让函数返回指针,这是很危险的。如果非要这么做,可以试试引用。
16楼2013-08-28 00:35:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 20 个回答
★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
小木虫: 金币+0.5, 给个红包,谢谢回帖
xzhdty: 金币+2, 谢谢老汉 2012-07-03 10:56:08
东山: 金币+8, 细心解说,专业到位,非常感谢,不过剩下的得给另一位前辈,不能全给,万望见谅 2012-07-06 10:39:48
这么写程序,害吟不浅咯。
俺出一把小手儿咯。
CODE:
#include
#include

int Pool(int * a,int asize, int * c, int csize)  
{
   int i=0;
   if (a== NULL || c == NULL)
   {
       return 0;
   }
   c[0]=0;
   c[1]=0;
   for(i=0;i    {  
      c[0]+=a[i];                  //存储数组元素值的和
      c[1]*=a[i];                   //存储数组元素值的积
   }  
   return 1;
}  

int main()  
{  
   int a[]={1,2,3,4};  
   int c[2];  
   if (Pool(a, sizeof (a)/sizeof (a[0]), c, sizeof (c)/sizeof (c[0])))
   {
       printf("Sum = %d\nProduct = %d\n",c[0],c[1]);
   }
   else
   {
       printf("What the hell....");
   }
   getch();  
   return 0;  
}

[ Last edited by yalefield on 2012-7-3 at 10:56 ]
2楼2012-07-03 10:54:00
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

东山

木虫 (正式写手)


引用回帖:
2楼: Originally posted by yalefield at 2012-07-03 10:54:00
这么写程序,害吟不浅咯。
俺出一把小手儿咯。

#include <stdio.h>
#include <conio.h>

int Pool(int * a,int asize, int * c, int csize)  
{
   int i=0;
   if (a== NULL || c == NULL ...

你的这种方式挺好的,那能不能帮忙分析一下我发的帖子里面那种方式问题所在呢?
4楼2012-07-03 11:13:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

小木虫: 金币+0.5, 给个红包,谢谢回帖
引用回帖:
4楼: Originally posted by 东山 at 2012-07-03 11:13:08
你的这种方式挺好的,那能不能帮忙分析一下我发的帖子里面那种方式问题所在呢?...

函数返回的,只是一个临时的空间,如果您不用一个恰当的盆子接住,那就木有咯。

所以咯,以俺大半辈子编程的经验,以及大量印度、美国、日本、欧洲程序员的习惯,函数的返回值就是int,用以表达成功、失败(各种失败,懊恼、愤怒、不屑、吃醋、忧虑等)。其余的,都通过参数(特别是指针)来完成。

参数,如您前面自己体会的,如果太多,可以设计成一个结构。

» 本帖已获得的红花(最新10朵)

5楼2012-07-03 12:07:09
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[公派出国] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +3 7lpolszZVXgi 2026-08-14 5/250 2026-08-15 04:41 by 4wMiSEwB6436
[硕博家园] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +3 HFw0lei2R37i 2026-08-14 4/200 2026-08-15 04:17 by 4wMiSEwB6436
[硕博家园] 售SCI一区文章,我:8O5.5.1.O5.4,科目全,可伽急 +3 k0dTPqJtl0jt 2026-08-14 4/200 2026-08-15 01:28 by 4wMiSEwB6436
[基金申请] 各位道友,我要去昆明玩几天,回来见。 +7 Tide man 2026-08-14 8/400 2026-08-15 01:11 by arzu_hma
[考研] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +3 HFw0lei2R37i 2026-08-14 7/350 2026-08-15 00:40 by 4wMiSEwB6436
[基金申请] 应该是93bebmhtak前后十一个字符比较关键 +23 Lanmanbaby 2026-08-09 37/1850 2026-08-14 13:40 by Equinoxhua
[硕博家园] 请教兼职经验 +3 是阿文鸭 2026-08-09 3/150 2026-08-14 12:07 by HER12025
[论文投稿] 职称评审,求友友推荐见刊最快的期刊 +5 工厂打螺丝 2026-08-08 5/250 2026-08-14 11:03 by 玖戈弋
[基金申请] FileCode能看出啥? +10 要乐观耀哥 2026-08-10 32/1600 2026-08-14 09:37 by 要乐观耀哥
[基金申请] 我的国基提前知道中了,可是同事的操作让我实在接受不了,怎么会有这样的人 +10 家与远方 2026-08-10 15/750 2026-08-14 02:08 by 绵羊哥哥
[硕博家园] 一作与独作在应聘高校教师时区别大吗 +3 mbygzh 2026-08-08 4/200 2026-08-13 19:31 by 龙-樱
[基金申请] 静等基金结果 +8 gjjjzhong 2026-08-10 21/1050 2026-08-13 17:56 by 且听虎啸
[基金申请] 不应该看fileCode +7 且听虎啸 2026-08-12 9/450 2026-08-13 14:27 by flydreamws
[基金申请] 结合人工智能,周易传统文化,filecode打分制来了,3分以上希望很大。 +3 Tide man 2026-08-12 4/200 2026-08-13 08:35 by ZJTJZ
[基金申请] 为什么网上很多人说本周 12号出结果 +6 瞬息宇宙 2026-08-10 7/350 2026-08-11 19:25 by Tide man
[基金申请] 什么时候出结果,有咨询渠道??? +3 Tide man 2026-08-11 3/150 2026-08-11 17:54 by kudofaye
[基金申请] 确定了,国自然21号放榜 +6 布布和一二 2026-08-10 7/350 2026-08-10 19:15 by 2000zf36392
[基金申请] 面上项目filecode邪修 +5 西山十月 2026-08-09 7/350 2026-08-10 07:32 by 仁砚薪传
[基金申请] fileCode有新解读? +10 Tide man 2026-08-08 18/900 2026-08-09 12:55 by 仁砚薪传
[基金申请] 关于filecode,很负责任的告诉大家 +6 爱看书的可乐 2026-08-08 7/350 2026-08-08 22:13 by a_niu
信息提示
请填处理意见