21ic电子技术开发论坛
标题:
子程序函数的两个参数要传递给主函数
[打印本页]
作者:
zhenykun
时间:
2013-7-18 22:38
标题:
子程序函数的两个参数要传递给主函数
设一个函数有两个返回值
主函数调用这个函数,怎么区别这两个返回值呢???
其实就是 这个子程序函数的两个参数要传递给主函数,怎么??
作者:
wyjie
时间:
2013-7-18 22:38
只能有一个返回值
作者:
jlyuan
时间:
2013-7-18 22:39
描述的不是很清楚,对于主函数来说调用的函数返回值仅仅是个数字,不是变量
作者:
yszong
时间:
2013-7-18 22:40
可以用指针或引用通过参数输出结果。也可以通过返回结构地址来返回结构。
作者:
dengdc
时间:
2013-7-18 22:41
也有能返回结构体的编译器
作者:
zhaoxqi
时间:
2013-7-18 22:41
认为应该需要全局变量或指针等参加判断
如果单单就返回a和b,而没有其他条件,我也想知道高手怎么做的。
bit flag_witch;用一个全局标志
uchar wtt()
{
uchar a,b;
if( ×××==1)
{
flag_witch=1;
return a;
}
else
{
flag_witch=0;
return b;
}
}
main()
{
uchar c;
------
------
c = wtt();
if(flag_witch==1) c保存的是a的值;
else c保存的是b的值;
}
作者:
heweibig
时间:
2013-7-18 22:42
定义全局数组变量,例如 char arr[2];
被调函数返回数组 arr[] 的索引或者下标值,告诉主调函数返回值的位置就行了。
作者:
wuhany
时间:
2013-7-18 22:42
还有啦:主调函数根据被调函数返回值转向何处是很智能的,再写一个:
主调函数
chzr c;
.....
c=f( ); //被调函数 f( ) 返回值为 a 或 b ;
switch(c){
case a : 转向....
case b : 转向....
}
......
作者:
jiahy
时间:
2013-7-20 15:26
可以用引用,指针也可以,但是多用于字符串数组等返回个数比较多的情况
作者:
lizye
时间:
2013-7-20 15:26
方法一:
typedef struct _tag_fn_ret
{
char val1;
char val2;
} FN_RET,*P_FN_RET;
FN_RET fn(void)
{
FN_RET ret;
// add extra codes here
return ret;
}
方法二:
void fn(P_FN_RET p_ret)
{
// add extra codes here
}
方法三:
void fn(char *p_val1,char *p_val2)
{
// add extra codes here
}
作者:
shimx
时间:
2013-7-20 15:29
把需要返回的变量的指针传递给函数即可。
void ReadMeter(float *V,float *I)读取电压和电流值
{
……
*V = 电压值;
*I = 电流值;
}
使用的时候:
float voltage,current;
ReadMeter(&voltage,¤t);//调用函数,读取电压和电流值
作者:
liliang9554
时间:
2013-7-20 15:29
返回指针比较方便,也可以跟全局变量配合使用
作者:
zhenykun
时间:
2013-7-20 15:33
还是用标准的做法吧,乱七八糟没法维护;
最通用的做法才是最好的,
1、返回结构体;也可以考虑枚举;
2、调用函数时传递指针;
大规模的程序,还是要控制全局变量,耦合太强了,没法维护,
如果有学过OO的,可以参考类的思想进行封装,
直接返回指针是不对的,局部变量保存在栈帧里,函数退出后这个指针就没有意义了,
作者:
wyjie
时间:
2013-7-20 15:33
如果单从实现性来看,大家的返回指针和结构体指针都可以,但是从程序的流程来讲,这样的设计是存在风险和缺陷的,讲错的地方,还往各位纠正
作者:
yszong
时间:
2013-7-20 15:34
返回指针相对于全局变量传值可以降低一定的耦合度,但如果返回局部变量地址,就有可能得到一个假返回值;
结构体传参,效率方面有点欠缺,毕竟一来一回还得复制一遍结构体数据;
所以还是用指针比较靠谱:
void func(__INPUT int a, __OUTPUT int *b,__OUTPUT int *c)
{
// function code
}
作者:
dengdc
时间:
2013-7-20 15:35
个人认为,如果用全局变量,那就不用返回了,多此一举。。
建议还是用指针来传递。
作者:
zhenykun
时间:
2013-7-20 15:36
嗯,知道了,多谢几位
作者:
zhenykun
时间:
2013-7-20 15:36
先结贴了
作者:
zhanghqi
时间:
2013-7-20 15:37
你的大概意思,我不知道理解的对不对。
首先,一个函数只有一个返回值,就是它执行完后只能返回一个值,但是,函数的参数有输入 和 输出两种,我不知道你所说的两个返回值是不是指 输出,如果是的话,一般就是使用指针的形式,就是调用方把地址传给该函数,该函数把一些处理结果赋值给该指针所指向的空间
作者:
jiajs
时间:
2013-7-20 15:37
如果是两个八位的,可以定义个结构体,让两个八位的和一个十六位的共同结构,返回时候使用16位的,然后在调用函数里转回到两个八位.
欢迎光临 21ic电子技术开发论坛 (https://bbs.21ic.com/)