所以我有这个功能,我返回2个值:
return result, result2;
现在我要做的是在我的main函数中使用这两个值。我想将它保存到main函数中的变量中,如下所示:
variable = function(a,b);
但是你如何在这里指定你想要的值?
答案 0 :(得分:12)
不,你不能在C中做到这一点,你可以只返回一个值。逗号运算符只返回最后一个值,因此实际上是返回第二个值。
您可以通过引用传递数据,例如
function(&a, &b);
void function(int *a, int* b){
*a = 42;
*b = 666;
}
您也可以将它们放在一个结构中并将其返回,甚至是一个指向动态分配结构的指针。
typedef struct int_pair {
int a, b;
} int_pair;
int_pair function(){
int_pair s;
s.a = 42;
s.b = 666;
return s;
}
答案 1 :(得分:4)
您可以在python和matlab以及其他语言中执行此操作,但不能使用C,C ++或其他语言。
在C ++中,您可以返回pair
。
在C中,您可以传入两个指针并以这种方式发回返回值,或者如果它们属于一起,则创建一个包含两个值的结构并返回该值。
答案 2 :(得分:3)
您正在使用return
语句使用逗号表达式。逗号表达式的作用是从左到右计算两个子表达式,但返回右子表达式的结果,这意味着return
语句也返回右子表达式的结果。 / p>
在C中,您无法使用return
语句返回多个值。只有一个或没有。
答案 3 :(得分:3)
你也可以使用包含两个值的结构然后返回它。
如果你有两个32位值,也可以使用另一个解决方案。事实上,您可以将它们存储在64位变量中。例如:uint32_t a = 10;
uint32_t b = 20;
//store both into c:
uint64_t c = (a << 32) + b;
//restore a and b:
a = c >> 32;
b = c & 0xFFFFFFFF;
答案 4 :(得分:2)
而不是将函数中的值返回到main()。尝试将它们的引用传递给调用函数(即)它们的地址以实现此目的。
答案 5 :(得分:2)
您可以使用
#include <stdio.h>
/* function to generate and return 2 numbers */
int * function( )
{
static int r[2];
int i;
r[0] = 10;
r[1] = 20;
return r;
}
/* main function to call above defined function */
int main ()
{
/* a pointer to an int */
int *p;
int i;
p = function();
for ( i = 0; i < 2; i++ )
{
printf( "%d\n",*(p + i));
}
return 0;
}