如何在C中将多个变量从函数传递给main?

时间:2012-04-02 18:08:27

标签: c return argument-passing

如果所述函数已经具有返回值,如何将函数的局部变量传递回main?对不起,这个问题,我试图让每个人尽可能客观,而不仅仅是我的情况。

具体来说:我有一个名为subtotal的函数。有两个计数变量。其中一个我带着return返回。另一个我需要提供我的main()功能使用。

编辑:澄清:

function something() {
   float counter = 0.0;
   int someOtherVar = 0;

   // the work

   return someOtherVar;
}

我想要做的是将counter浮动传递给main

2 个答案:

答案 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中。