我如何能够接受,比如说2个值,然后通过一个函数输出它(应该使用相同的输入值进行两种不同类型的计算),这样我可以输出两个不同的值?
举个例子,我有2个输入(例如:int a = 2,int b = 5),然后我会用它们做一些计算(第一个:(a + b)* 2,第二个:(ab)/ 2)。我通常会使用两个函数,但我怎么能让它们都在一个函数下,但仍然给我两个不同的值?
编辑:我注意到一些响应是使用指针,但我怎样才能从主程序中的同一个函数打印出多个答案(我实际上想从主程序中专门打印)?
答案 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
后打印result2
和call_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,它可以整齐地找到它打印的两个值。