C - 在函数中返回2个值并尝试使用它们

时间:2014-01-30 16:49:07

标签: c

所以我有这个功能,我返回2个值:

return result, result2;

现在我要做的是在我的main函数中使用这两个值。我想将它保存到main函数中的变量中,如下所示:

variable = function(a,b);

但是你如何在这里指定你想要的值?

6 个答案:

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