如何从一个函数发送多个值?

时间:2014-10-27 08:00:11

标签: c function

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

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

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

4 个答案:

答案 0 :(得分:3)

你可以做这样的事情

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()内,只需在调用result1后打印result2call_your_func()的值即可。它会打印出所需的结果。

答案 1 :(得分: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;

答案 2 :(得分:1)

使用指针:

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;
}

答案 3 :(得分:1)

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

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

将打印myFunc计算的c值,后跟myFunc的返回值。 你在这里做的是使用C将参数推入堆栈的顺序,即最右边的第一个推送。这个最右边的参数涉及执行myFunc,它设置变量c。当myFunc返回时,其返回值被压入堆栈。然后推送下一个参数,即c,因此刚刚计算出的c的值被压入堆栈。现在调用sprintf,它可以整齐地找到它打印的两个值。