智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 5822|回复: 21
打印 上一主题 下一主题

C语言return的返回两个变量值的方法

  [复制链接]

3

主题

13

帖子

0

精华

高级会员

Rank: 4

积分
837
威望
579
贡献
240
兑换币
245
注册时间
2015-1-13
在线时间
9 小时
毕业学校
小学
跳转到指定楼层
1#
发表于 2015-1-18 10:45:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
正如题意,相信大家都用过return,但是大家有没有想过用return返回两个变量的值呢?我是这么想的:
       首先声明数组,并与指针建立关系
float MIX[2],*over=MIX;

。。。。经过变量的处理。。。。

然后返回指针
   return(*over);

在编译的时候发现没有问题,但是程序执行到这里就卡住了,说明一定存在问题。
希望大家可以发现问题的存在,将它攻克,相信这方法对大家的程序都有用!!!
回复

使用道具 举报

28

主题

2228

帖子

1

精华

杰出人士

Rank: 12Rank: 12Rank: 12

积分
15822

论坛元老奖章在线王奖章活跃会员奖章优秀会员奖章资源大师奖章

QQ
威望
7433
贡献
4215
兑换币
5195
注册时间
2013-12-9
在线时间
2087 小时
2#
发表于 2015-1-18 11:00:05 | 只看该作者
你把得到函数返回值的那个变量也改成数组试试
回复 支持 反对

使用道具 举报

3

主题

13

帖子

0

精华

高级会员

Rank: 4

积分
837
威望
579
贡献
240
兑换币
245
注册时间
2015-1-13
在线时间
9 小时
毕业学校
小学
3#
 楼主| 发表于 2015-1-18 11:15:54 | 只看该作者
六步上篮 发表于 2015-1-18 11:00
你把得到函数返回值的那个变量也改成数组试试

你意思是返回数组首地址吗?我试了,编译报错
回复 支持 反对

使用道具 举报

0

主题

61

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1455
威望
747
贡献
446
兑换币
474
注册时间
2013-12-3
在线时间
131 小时
4#
发表于 2015-1-18 11:20:27 | 只看该作者
你的float  max应该是局部变量吧。。。返回的是局部变量的地址   肯定卡住。。定义成全局变量。。
回复 支持 反对

使用道具 举报

4

主题

158

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1933
威望
1075
贡献
636
兑换币
719
注册时间
2013-8-4
在线时间
111 小时
毕业学校
本科
5#
发表于 2015-1-18 13:15:42 | 只看该作者
函数内部变量会在函数退出的时候释放。
回复 支持 反对

使用道具 举报

16

主题

746

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4951
威望
2517
贡献
1610
兑换币
1718
注册时间
2013-12-12
在线时间
412 小时
6#
发表于 2015-1-18 14:35:17 | 只看该作者
要返回指针,可以声明成指针类型的函数
回复 支持 反对

使用道具 举报

1

主题

15

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
447
QQ
威望
223
贡献
156
兑换币
145
注册时间
2014-7-21
在线时间
34 小时
毕业学校
南京信息工程大学
7#
发表于 2015-1-19 02:55:41 | 只看该作者
楼上各位大神回答得真好,都很有思想,也精通C语言,我受益匪浅
回复 支持 反对

使用道具 举报

15

主题

312

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1912
QQ
威望
1005
贡献
553
兑换币
621
注册时间
2014-3-29
在线时间
177 小时
8#
发表于 2015-1-19 04:53:59 | 只看该作者
多此一举,定义成全局变量不就好了,直接void类型函数 不用返回
回复 支持 反对

使用道具 举报

31

主题

731

帖子

0

精华

版主

情怀、节操、内涵、下限

Rank: 9Rank: 9Rank: 9

积分
8787
威望
4777
贡献
1128
兑换币
3165
注册时间
2012-5-7
在线时间
1441 小时
毕业学校
长春大学
9#
发表于 2015-1-19 08:20:32 | 只看该作者
因为你局部的指针被释放掉了,所以会跑飞。有几种解决方案
1. 子函数里用静态变量
static float a[];
.....
return a;
2. 用全局变量
3. 用申请地址的方式,但是如果这个子函数被多次调用会产生很多垃圾
float *a=malloc(sizeof(float)*2);
*a=...;
*(a+1)=...;
...
return a;
4. 把数组作为地址传进来,然后不用返回值
void fun(float*  a)
....
此外还有很多其他方法  
回复 支持 反对

使用道具 举报

31

主题

731

帖子

0

精华

版主

情怀、节操、内涵、下限

Rank: 9Rank: 9Rank: 9

积分
8787
威望
4777
贡献
1128
兑换币
3165
注册时间
2012-5-7
在线时间
1441 小时
毕业学校
长春大学
10#
发表于 2015-1-19 08:22:46 | 只看该作者
本帖最后由 majorfog 于 2015-1-19 08:27 编辑

用上述第四种解决方法为最佳,体现了很好的封装性,不会使用全局变量而且还不会产生垃圾
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-26 03:59 , Processed in 0.074275 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表