如果所述函数已经具有返回值,如何将函数的局部变量传递回main
?对不起,这个问题,我试图让每个人尽可能客观,而不仅仅是我的情况。
具体来说:我有一个名为subtotal
的函数。有两个计数变量。其中一个我带着return
返回。另一个我需要提供我的main()
功能使用。
编辑:澄清:
function something() {
float counter = 0.0;
int someOtherVar = 0;
// the work
return someOtherVar;
}
我想要做的是将counter
浮动传递给main
。
答案 0 :(得分:11)
将所有返回值放在struct
中,然后返回。
#include <stdio.h>
struct myret {
int total;
int count;
};
struct myret foo(void)
{
struct myret r;
r.total = 42;
r.count = 2;
return r;
}
int main(void)
{
struct myret r = foo();
printf("%d %d\n", r.total, r.count);
return 0;
}
或者使用指针作为“其他”返回值。
int foo(int *other)
{
if (other)
*other=42;
return 1;
}
int main(void)
{
int a = 0;
int b = foo(&a);
...
}
您也可以通过将指向结构的指针传递给函数来组合它们,并让您的函数填充到:
#include <stdio.h>
struct myret {
int total;
int count;
};
int foo(struct myret *r)
{
if (r) {
r->total = 42;
r->count = 2;
}
return 0;
}
int main(void)
{
struct myret r;
int rc = foo(&r);
if (rc == 0) {
printf("%d %d\n", r.total, r.count);
}
return rc;
}
答案 1 :(得分:9)
将指向额外返回值的指针作为函数的参数传递。
int foo(int *anotherOutParam)
{
*anotherOutParam = 1;
return 2;
}
并称之为:
int ret1, ret2;
ret1 = foo(&ret2);
//do something with ret2
通常,@ Mat建议将所有返回值打包到struct
中。