【问题标题】:How to send out multiple values from one function?如何从一个函数发送多个值?
【发布时间】:2014-10-27 08:00:10
【问题描述】:

我如何能够接受,比如说 2 个值,然后通过一个函数输出它(它应该使用相同的输入值进行两种不同类型的计算),以便我可以输出两个不同的值?

例如,我有 2 个输入(例如:int a=2 和 int b=5),然后我会使用它们进行一些计算(第一个:(a+b)*2,第二个: (a-b)/2)。我通常会为此使用两个函数,但我怎样才能让它们都在一个函数下,但仍然给我两个不同的值?

编辑:我注意到一些响应是使用指针,但我如何能够从主程序中的同一函数打印出多个答案(我实际上想专门从主程序打印)?

【问题讨论】:

  • 阅读一些关于使用call by referencecall by address. 传递参数的内容
  • 您是否考虑过使用数组作为可以返回两个不同值的返回类型?如果您的值不是同一类型,返回 struct 应该可以吗?
  • @jetuas 请不要编辑您的问题添加另一个问题。使用 cmets。

标签: c function


【解决方案1】:

你可以这样做

int main()
{
    int a=2, b= 5;
    int result1 =0, result2 =0;

    call_your_func(a,b, &result1 , &result2 );

}

void call_your_func(int p, int q, int * res1, int * res2)
{
//do the first calculcation on a and b, store in *res1

//do the second calculcation on a and b, store in *res2

}

如果需要返回更多的结果,可以考虑使用数组返回值。

编辑


main() 内部,只需在调用call_your_func() 后打印result1result2 的值。它会打印出想要的结果。

【讨论】:

  • 哦,等等,如果我将它存储在那个指针中,我就不必返回“call_your_function”?
【解决方案2】:
struct two_results {
    double x;
    double y;
}

struct two_results add_sub(double a, double b) {
    struct two_results ret;
    ret.x = a + b;
    ret.y = a - b;
    return ret;
}

这可以让你做

struct two_results res1 = add_sub(4, 3);
sum2 = add_sub(6, 3).x;
diff3 = add_sub(12, 3).y;

【讨论】:

    【解决方案3】:

    使用指针:

    float value1, value2;
    // ...
    
        your_function(4, 3, &value1, &value2);
    // ...
    
    
    
    void your_function(int a, int b, float *value1, float *value2)
    {
         *value1 = (a+b)*2;
         *value2 = (a+b)/2;
    }
    

    【讨论】:

      【解决方案4】:

      你说:“但是我怎么能从同一个函数中打印出多个答案呢?”

      sprintf(fout,"%d, %d", c, myFunc(a,b,&c));
      

      会打印出 myFunc 计算出来的 c 的值,然后是 myFunc 的返回值。 您在这里所做的是使用 C 将参数压入堆栈的顺序,即最右边的先压入。这个最右边的参数涉及执行 myFunc,它设置变量 c。当 myFunc 返回时,它的返回值被压入堆栈。然后下一个参数被压入,也就是c,所以刚刚计算出来的c的值被压入栈中。现在调用 sprintf,它巧妙地找到了它打印的两个值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-08
        • 2018-08-11
        • 2022-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多