24小时热门版块排行榜    

查看: 4862  |  回复: 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的回帖

goldfox_79

金虫 (正式写手)



小木虫: 金币+0.5, 给个红包,谢谢回帖
我是这样理解的:函数中的局部变量被存储在栈里。当执行函数时,函数开始使用栈里的某个内存区(比如0x10)来存储你的int a[2]。当函数执行完毕时,操作系统收回0x10对应的内存,根据具体情况分配使用。在0x10区没有被分配使用之前,你仍然可以通过读取这部分区域获得原先在函数执行时存储的数据。但是一旦0x10被分配,其内容会被修改。因此,这段代码是非常危险不靠谱的。
20楼2013-09-01 07:44:50
已阅   回复此楼   关注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的回帖
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 面上合作单位盖章 +5 ssyjh 2026-08-27 8/400 2026-09-01 12:58 by ssyjh
[基金申请] 为什么资助数各大高校都创新高,自己申请怎么就这么难 +13 Kittylucky 2026-08-27 14/700 2026-09-01 11:06 by feng6531
[基金申请] 麻烦专家们看看评委们的意见(F口面上) +7 gdd2018 2026-08-28 12/600 2026-09-01 08:32 by 尼古拉斯小虫
[基金申请] 面上意见出来了 +12 黄鸟于飞Chao 2026-08-29 23/1150 2026-08-31 18:57 by 黄鸟于飞Chao
[文学芳草园] 梦想 +5 myrtle 2026-08-26 5/250 2026-08-31 14:40 by hahaboy
[基金申请] 中青基了要发朋友圈吗? +7 349506619 2026-08-28 7/350 2026-08-31 13:39 by 冼亮淀粉酶
[基金申请] 29号明天会评吗 +4 笨笨唐 2026-08-28 4/200 2026-08-31 09:30 by huixian257
[基金申请] 基金不中,共勉 +12 eulota 2026-08-26 12/600 2026-08-31 08:42 by ZJTJZ
[基金申请] 有没有仍没收到信息的 +7 德尚中行 2026-08-27 8/400 2026-08-30 20:52 by purplejack
[基金申请] 我就是申请一个面上项目而已,这评审意见是按照杰青的条件评的吧? +6 gouxfjh 2026-08-28 11/550 2026-08-30 07:57 by gouxfjh
[基金申请] 国自然面上复盘~欢迎讨论 (金币+15) +15 晴天加油 2026-08-26 16/800 2026-08-29 18:28 by symmetry
[基金申请] 系统查不到 +11 董八千 2026-08-26 11/550 2026-08-28 18:06 by Leogzhya
[基金申请] 怎么查啊 +6 huang1991js 2026-08-26 6/300 2026-08-28 08:42 by winsaint
[基金申请] 为什么 国际(地区)合作与交流项目 没有放榜? 10+3 majunge000 2026-08-26 11/550 2026-08-27 08:42 by 北京莱茵编辑
[基金申请] 我不理解! +15 Edward_pc 2026-08-26 23/1150 2026-08-26 20:34 by zzuzxg
[基金申请] 2026年8月25日国自然放榜前突然收到列入评审专家邮件,有关系吗? +25 木水思豆 2026-08-25 28/1400 2026-08-26 14:53 by draco1987
[基金申请] 出来了 +9 trojank 2026-08-26 9/450 2026-08-26 14:25 by 宝贝虫子
[基金申请] 为什么国自然不能直接公布 +4 bjdxyxy 2026-08-26 4/200 2026-08-26 13:12 by qingmu1201
[基金申请] 国合里面能看到了 +7 一怀馨秋 2026-08-26 7/350 2026-08-26 11:23 by zhaosm1982
[基金申请] 牛来!米来!面来! +8 beefly 2026-08-26 8/400 2026-08-26 08:37 by xuzhipiao
信息提示
请填处理意见