智能车制作

 找回密码
 注册

扫一扫,访问微社区

楼主: sencond_one
打印 上一主题 下一主题

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

  [复制链接]

34

主题

452

帖子

0

精华

杰出人士

Rank: 12Rank: 12Rank: 12

积分
14046

优秀会员奖章活跃会员奖章在线王奖章

威望
6066
贡献
2554
兑换币
4050
注册时间
2013-7-29
在线时间
2713 小时
毕业学校
南京气象学院
13#
发表于 2015-1-20 21:25:02 | 只看该作者
函数里的指针不管怎么传递,到了函数里都是备份的地址,你打印一下就知道,就算不在函数里新建,是全局传递过来的,地址也不一样.
回复 支持 反对

使用道具 举报

3

主题

13

帖子

0

精华

高级会员

Rank: 4

积分
837
威望
579
贡献
240
兑换币
245
注册时间
2015-1-13
在线时间
9 小时
毕业学校
小学
12#
 楼主| 发表于 2015-1-20 18:19:04 | 只看该作者
majorfog 发表于 2015-1-19 08:20
因为你局部的指针被释放掉了,所以会跑飞。有几种解决方案
1. 子函数里用静态变量
static float a[];

好主意
回复 支持 反对

使用道具 举报

13

主题

289

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2018
威望
972
贡献
596
兑换币
655
注册时间
2014-11-1
在线时间
225 小时
11#
发表于 2015-1-19 08:55:44 | 只看该作者
:)看楼上
回复 支持 反对

使用道具 举报

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 编辑

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

使用道具 举报

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)
....
此外还有很多其他方法  
回复 支持 反对

使用道具 举报

15

主题

312

帖子

0

精华

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

1

主题

15

帖子

0

精华

中级会员

Rank: 3Rank: 3

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

使用道具 举报

16

主题

746

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

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

使用道具 举报

4

主题

158

帖子

0

精华

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

0

主题

61

帖子

0

精华

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-2 22:19 , Processed in 0.063152 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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