【问题标题】:how to return multiple variables in a function [duplicate]如何在函数中返回多个变量[重复]
【发布时间】:2015-02-02 23:40:23
【问题描述】:

我一直在寻找这个问题的答案大约一个小时,而且我对 C 很陌生。当提到这一行时,我收到警告“逗号表达式的左手操作数没有影响”

return studio, one, two;

根据我的打印函数显示的信息,该语句没有返回变量一或二。这是在 C 中返回多个变量的正确方法还是我做错了?这是我第一次不得不这样做,我们没有在课堂上讨论这个问题。提前为(我敢肯定)一个非常简单的修复道歉。

【问题讨论】:

  • 如果这个语法被允许(它不是),你会如何调用这个函数?
  • @500-InternalServerError 是的,但它在评估它们后丢弃了第一个表达式。
  • @Quentin:好吧,允许,但没有回报,然后:)
  • @500-InternalServerError 很好地总结了 C:p
  • 1) 返回结构 2) 写入作为参数传入的指针 3) 分配/填充结构并返回其指针。或 4) ugh:全局变量。 #1 是最好的。

标签: c return


【解决方案1】:

您不能在 C 中返回多个值。您的选择是返回一个结构,或者传入对要修改的变量的引用:

返回结构:

struct studio_stuff {
   int studio;
   int one;
   int two;
};

struct studio_stuff foo()
{
   struct studio_stuff ret;
   ret.studio = 0;
   ret.one = 1;
   ret.two = 2;
   return ret;
}

传入要修改的引用:

void foo(int * studio, int * one, int * two)
{
    *studio = 0;
    *one = 1;
    *two = 2;
}

【讨论】:

    【解决方案2】:

    您不能在 C 中返回多个值。您可以通过以下方式之一实现类似(尽管不相同)的效果:

    • 返回结构或(指向概念的)数组。
    • 写入作为参数传递的多个指针

    【讨论】:

    • 请注意,您不能返回实际的数组。
    • 请注意,如果您返回一个指向数组的指针,您必须担心内存分配。将数组嵌入结构中可以避免该问题,但会减少到第一种选择(返回结构)。总的来说,返回一个结构体或多个指针参数是最好的选择。
    【解决方案3】:

    逗号运算符计算其第一个操作数,丢弃结果,并给出第二个操作数的结果。

    所以return studio, one, two 将评估studio,丢弃该值,评估one,丢弃该值,评估two 并返回该值。

    没有办法从一个函数返回多个值。选项是返回一个结构(结构的值由一组值组成)或传递作为指针的附加参数。例如;

    struct X func();
    

    之所以有效,是因为struct X 可以包含多个值。

    或者

    int func(double *y);
    

    是一个可以返回int的函数,或者设置*y的值(调用者可以看到)。

    【讨论】:

      猜你喜欢
      • 2021-01-29
      • 1970-01-01
      • 2013-02-28
      • 2013-11-13
      • 1970-01-01
      • 2021-04-03
      • 2015-06-22
      • 2017-12-03
      • 2021-10-19
      相关资源
      最近更新 更多