【问题标题】:Can 'return' return multiple values in C? [duplicate]可以'return'在C中返回多个值吗? [复制]
【发布时间】:2011-04-07 07:11:53
【问题描述】:

可能重复:
C++ — return x,y; What is the point?

这是一段在 C 中完美执行的代码。

int a=3,b=4,x,y;
x=a+b;
y=a*b;
return(x,y);

这个函数返回12。谁能解释一下。

【问题讨论】:

标签: c++ c


【解决方案1】:

这是因为您(不经意间)使用了comma operator,其值是包含的最后一个表达式的值。您可以列出任意数量的表达式,用逗号分隔,结果始终是最后一个表达式的结果。这与return 无关;您的代码可以像这样重写

int tmp = (x, y); // x = 7, y = 12 -> tmp is assigned 12
return tmp;

[更新] 您通常不需要将括号括在列表中,但在这里您需要,因为赋值运算符具有比逗号更高的优先级 - 感谢 @Draco 指出它。

【讨论】:

  • @Draco,你是对的,谢谢 :-) 我相应地更新了我的答案。
【解决方案2】:

您的问题的答案是“不,return 不能返回多个值”。在这里,您可以看到对合法表达式 x,y 的求值结果,即 y,即 3*4 = 12。

【讨论】:

    【解决方案3】:

    编辑:这回答了标题 Q,即“可以返回返回多个值” 不完全是。你可以

    1. 使用引用(或指针)参数返回第二个变量
    2. 否则,创建一个包含 x 和 y 的新类或结构并返回这个新类的实例

    【讨论】:

      【解决方案4】:

      这是逗号运算符。它先计算其左侧,然后计算其右侧,其结果值为右侧。

      所以,return(x,y)return y 相同,因为评估 x 没有副作用。

      在 C 中“返回多个值”的唯一方法是按值返回结构:

      #include <stdio.h>
      
      typedef struct {
          int sum;
          int product;
      } sumprod;
      
      sumprod get_sum_and_product(int x, int y) {
          sumprod ret = {x + y, x * y};
          return ret;
      }
      
      int main() {
          sumprod values = get_sum_and_product(3,4);
          printf("sum is %d, product is %d\n", values.sum, values.product);
      }
      

      【讨论】:

        【解决方案5】:

        comma operator 只是一个二元运算符。返回最右边的值。

        【讨论】:

          【解决方案6】:

          不,您不能简单地通过使用 (x, y) 来返回多个值——这不是一个元组,正如您可能对其他语言所期望的那样,而是使用括号括起来的 comma operator,它将简单地计算为 y (反过来,这将由 return 返回)。

          如果你想返回多个值,你应该create a struct,像这样:

          #include <stdio.h>
          
          struct coordinate
          {
              int x;
              int y;
          };
          
          struct coordinate myfunc(int a, int b)
          {
              struct coordinate retval = { a + b , a * b };
              return retval;
          }
          
          int main(void)
          {
              struct coordinate coord = myfunc(3, 4);
              printf("X: %d\n", coord.x);
              printf("Y: %d\n", coord.y);
          }
          

          这显示了使用结构的完整语法,但如果您更喜欢类似的内容,您可以use typedef

          typedef struct
          {
              int x;
              int y;
          } coordinate;
          
          coordinate myfunc(int a, int b)
          {
              coordinate retval = { a + b , a * b };
              return retval;
          }
          
          // ...etc...
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-02-04
            • 1970-01-01
            • 1970-01-01
            • 2018-12-24
            • 1970-01-01
            • 2020-12-22
            • 2018-06-26
            相关资源
            最近更新 更多