智能车制作

标题: C语言return的返回两个变量值的方法 [打印本页]

作者: sencond_one    时间: 2015-1-18 10:45
标题: C语言return的返回两个变量值的方法
正如题意,相信大家都用过return,但是大家有没有想过用return返回两个变量的值呢?我是这么想的:
       首先声明数组,并与指针建立关系
float MIX[2],*over=MIX;

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

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

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

作者: 六步上篮    时间: 2015-1-18 11:00
你把得到函数返回值的那个变量也改成数组试试
作者: sencond_one    时间: 2015-1-18 11:15
六步上篮 发表于 2015-1-18 11:00
你把得到函数返回值的那个变量也改成数组试试

你意思是返回数组首地址吗?我试了,编译报错
作者: 吴朋    时间: 2015-1-18 11:20
你的float  max应该是局部变量吧。。。返回的是局部变量的地址   肯定卡住。。定义成全局变量。。
作者: 灰原哥哥    时间: 2015-1-18 13:15
函数内部变量会在函数退出的时候释放。
作者: 麦籽小立    时间: 2015-1-18 14:35
要返回指针,可以声明成指针类型的函数
作者: 小周    时间: 2015-1-19 02:55
楼上各位大神回答得真好,都很有思想,也精通C语言,我受益匪浅
作者: afd    时间: 2015-1-19 04:53
多此一举,定义成全局变量不就好了,直接void类型函数 不用返回
作者: majorfog    时间: 2015-1-19 08:20
因为你局部的指针被释放掉了,所以会跑飞。有几种解决方案
1. 子函数里用静态变量
static float a[];
.....
return a;
2. 用全局变量
3. 用申请地址的方式,但是如果这个子函数被多次调用会产生很多垃圾
float *a=malloc(sizeof(float)*2);
*a=...;
*(a+1)=...;
...
return a;
4. 把数组作为地址传进来,然后不用返回值
void fun(float*  a)
....
此外还有很多其他方法  

作者: majorfog    时间: 2015-1-19 08:22
本帖最后由 majorfog 于 2015-1-19 08:27 编辑

用上述第四种解决方法为最佳,体现了很好的封装性,不会使用全局变量而且还不会产生垃圾
作者: Young_rock    时间: 2015-1-19 08:55
:)看楼上
作者: sencond_one    时间: 2015-1-20 18:19
majorfog 发表于 2015-1-19 08:20
因为你局部的指针被释放掉了,所以会跑飞。有几种解决方案
1. 子函数里用静态变量
static float a[];

好主意

作者: 何俊    时间: 2015-1-20 21:25
函数里的指针不管怎么传递,到了函数里都是备份的地址,你打印一下就知道,就算不在函数里新建,是全局传递过来的,地址也不一样.

作者: [JACE]    时间: 2015-1-21 11:38
这种问题,改下函数返回值类型什么的,与返回值类型一样就ok了
作者: sencond_one    时间: 2015-1-22 08:44
[JACE] 发表于 2015-1-21 11:38
这种问题,改下函数返回值类型什么的,与返回值类型一样就ok了

你返回过两个变量吗?

作者: quex    时间: 2015-1-22 09:39
用结构体也可以的
作者: 我快乐    时间: 2015-1-22 09:56

float MIX[2];
void  函数名(float &MIX)
{
   
     
}
作者: [JACE]    时间: 2015-1-22 12:37
sencond_one 发表于 2015-1-22 08:44
你返回过两个变量吗?

哪有返回两个变量的说法,只能说返回某种数据类型

作者: lgb10010    时间: 2015-1-22 12:50
majorfog 发表于 2015-1-19 08:20
因为你局部的指针被释放掉了,所以会跑飞。有几种解决方案
1. 子函数里用静态变量
static float a[];

可以试试
作者: Quixote    时间: 2015-1-22 13:27
Return一般只返回逻辑值的好
作者: mnmlyn    时间: 2015-1-23 00:15
majorfog 发表于 2015-1-19 08:20
因为你局部的指针被释放掉了,所以会跑飞。有几种解决方案
1. 子函数里用静态变量
static float a[];

膜拜一下,突然发现学过的都还给漂亮的C语言老师了

作者: 乁year    时间: 2015-1-23 09:15
majorfog 发表于 2015-1-19 08:20
因为你局部的指针被释放掉了,所以会跑飞。有几种解决方案
1. 子函数里用静态变量
static float a[];

好厉害!





欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2