版块导航
正在加载中...
客户端APP下载
论文辅导
申博辅导
登录
注册
帖子
帖子
用户
本版
应《网络安全法》要求,自2017年10月1日起,未进行实名认证将不得使用互联网跟帖服务。为保障您的帐号能够正常使用,请尽快对帐号进行手机号验证,感谢您的理解与支持!
24小时热门版块排行榜
>
论坛更新日志
(1514)
>
虫友互识
(99)
>
硕博家园
(31)
>
考博
(25)
>
论文投稿
(22)
>
找工作
(15)
>
文献求助
(15)
>
基金申请
(14)
>
导师招生
(13)
>
教师之家
(13)
>
博后之家
(11)
>
论文道贺祈福
(9)
>
考研
(9)
>
公派出国
(8)
>
休闲灌水
(8)
>
招聘信息布告栏
(4)
小木虫论坛-学术科研互动平台
»
计算模拟区
»
程序语言
»
C/C++
»
一种函数多个返回值的方法,大家探讨一下可行性吧
5
1/1
返回列表
查看: 3796 | 回复: 19
只看楼主
@他人
存档
新回复提醒
(忽略)
收藏
在APP中查看
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖
东山
木虫
(正式写手)
应助: 3
(幼儿园)
金币: 13197.6
帖子: 493
在线: 227.9小时
虫号: 1127502
[交流]
一种函数多个返回值的方法,大家探讨一下可行性吧
原文地址
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]是局部变量,其地址是否还能返回
回复此楼
» 猜你喜欢
寻求一种能扛住强氧化性腐蚀性的容器密封件
已经有7人回复
到新单位后,换了新的研究方向,没有团队,持续积累2区以上论文,能申请到面上吗
已经有8人回复
申请2026年博士
已经有6人回复
请问哪里可以有青B申请的本子可以借鉴一下。
已经有5人回复
天津工业大学郑柳春团队欢迎化学化工、高分子化学或有机合成方向的博士生和硕士生加入
已经有5人回复
2025冷门绝学什么时候出结果
已经有7人回复
请问有评职称,把科研教学业绩算分排序的高校吗
已经有6人回复
Bioresource Technology期刊,第一次返修的时候被退回好几次了
已经有7人回复
请问下大家为什么这个铃木偶联几乎不反应呢
已经有5人回复
康复大学泰山学者周祺惠团队招收博士研究生
已经有6人回复
高级回复
» 本主题相关价值贴推荐,对您同样有帮助:
非线性最小二乘拟合(初值问题)lsqcurvefit 函数的设定
已经有14人回复
Gulp 拟合势函数 初值设置的问题
已经有12人回复
大家推荐一下实变函数、泛函分析好的教材与视频
已经有21人回复
Lyapunov函数的选取和控制系统收敛速度快慢是怎么一种关系?
已经有10人回复
怎么得到旋轨耦合中不同J值的本征值和波函数?
已经有6人回复
为什么画出的对关联函数第三峰刚开始,之后的函数值就全变为零了,怎么解决这个问题
已经有5人回复
大家创造的基金查询方法,缩小范围的一种技巧
已经有9人回复
关于SIESTA中如何计算功函数的一种做法探讨
已经有8人回复
[求助]C/C++中多个返回值的问题
已经有5人回复
【讨论】请教大家一种有机物的合成方法
已经有4人回复
【原创】并行自洽计算后得到和节点数一样多的波函数文件wfc
已经有4人回复
【求助】控制律设计Lyapunov函数的参数取值范围
已经有8人回复
【求助】只知道有限个函数值求积分
已经有10人回复
» 抢金币啦!回帖就可以得到:
查看全部散金贴
加拿大/英属哥伦比亚大学曹彦凯课题组招收全奖博士/博后 [机器学习/优化/控制方向]
+
1
/84
湘潭大学化学学院陈华杰教授课题组招收有机/高分子方向的博士研究生
+
1
/81
同济大学 物理科学与工程学院 陈振跃(国家高层次青年人才) 课题组招聘博士后
+
1
/71
双一流大学湘潭大学“化工过程模拟与强化”国家地方联合工程研究中心招收各类博士生
+
1
/62
南京大学自旋全国重团队陆显扬课题组招聘博士后
+
2
/50
都柏林大学微纳制造博士后招聘启事——二
+
1
/35
西湖大学李小波课题组诚聘博士后3名(生物学方向)
+
1
/18
长春理工大学和西安工业大学主动光电探测成像技术重点实验室招收博士生
+
1
/13
中科院过程工程研究所 诚招博士后及科研助理
+
1
/12
SCI辅 助
+
1
/8
3 纯 4 自 7 己 0 写 9 非 ③ 中 1 介 ⑦ 优0 惠,SCI辅助
+
1
/8
博士后招聘-液态金属与低温生物医学研究中心
+
1
/7
国家纳米科学中心鄢勇课题组26年博士招生
+
1
/6
想替换掉环状DNA中心通道中的金属离子 如何替换才是正确操作
+
1
/4
招收2026年和2027年入学博士学生 国家纳米科学中心曹宇虹课题组
+
1
/4
深圳先进院三院院士成会明团队诚聘液流电池/高分子合成等方向博后、科研助理、工程师
+
1
/3
申博求捞
+
1
/3
招收2026年秋季入学博士生1名(北京科技大学 力学超材料/机器学习/增材制造相关方向)
+
1
/2
中国环境科学研究院-河湖流域地表、地下水环境碳氮磷循环-招聘联培、客座学生
+
2
/2
招收2026年入学博士学生 国家纳米科学中心曹宇虹课题组
+
1
/2
1楼
2012-07-03 10:33:22
已阅
回复此楼
关注TA
给TA发消息
送TA红花
TA的回帖
ElysiumF8
新虫
(初入文坛)
应助: 0
(幼儿园)
金币: 193.5
帖子: 6
在线: 2.9小时
虫号: 2612623
★ ★
小木虫: 金币+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 个回答
yalefield
金虫
(文坛精英)
程序强帖: 3
应助: 129
(高中生)
贵宾: 0.17
金币: 21238.9
帖子: 12101
在线: 759.1小时
虫号: 96063
★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
小木虫: 金币+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
]
赞
一下
(1人)
回复此楼
2楼
2012-07-03 10:54:00
已阅
回复此楼
关注TA
给TA发消息
送TA红花
TA的回帖
东山
木虫
(正式写手)
应助: 3
(幼儿园)
金币: 13197.6
帖子: 493
在线: 227.9小时
虫号: 1127502
引用回帖:
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的回帖
yalefield
金虫
(文坛精英)
程序强帖: 3
应助: 129
(高中生)
贵宾: 0.17
金币: 21238.9
帖子: 12101
在线: 759.1小时
虫号: 96063
★
小木虫: 金币+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的回帖
查看全部 20 个回答
如果回帖内容含有宣传信息,请如实选中。否则帐号将被全论坛禁言
普通表情
龙
兔
虎
猫
高级回复
(可上传附件)
百度网盘
|
360云盘
|
千易网盘
|
华为网盘
在新窗口页面中打开自己喜欢的网盘网站,将文件上传后,然后将下载链接复制到帖子内容中就可以了。
信息提示
关闭
请填处理意见
关闭
确定