【问题标题】:How can I return 2 numbers from a function如何从函数返回 2 个数字
【发布时间】:2018-10-23 00:47:59
【问题描述】:

我必须将下面这段确切的代码复制粘贴到 3 个单独的函数中(果汁函数、牛奶函数和购买函数)。所以我想,为什么不创建另一个名为 array_checker 的函数并在 toe juice、milk 和 buy 函数中调用它,而不是复制粘贴代码。但是,函数(复制粘贴的代码)需要返回 2 个东西。 int item_used 和 int buy_now。我该怎么做?

这是我复制粘贴的代码:

if (item_sale == 1) {
    item_used = TRUE;
    buy_now = legal_cards[0];
} else {
    item_used = FALSE; 
}

【问题讨论】:

标签: c arrays function if-statement return


【解决方案1】:

有两种通用的方法:

  • 创建一个带有两个 int 成员的 struct 以从您的函数返回 - 当您返回的两个值很容易复制时,这很好,例如一对ints,或
  • 获取一个或两个变量的指针 - 这样可以避免复制,但需要调用者预先为结果分配存储空间。

这是第一种方法的示例:

struct buy_decision {
    int item_used;
    int buy_now;
};

buy_decision milk(...) {
    buy_decision res;
    if (item_sale == 1) {
        res.item_used = TRUE;
        res.buy_now = legal_cards[0];
    } else {
        res.item_used = FALSE; 
        res.buy_now = 0;
    }
    return res;
}

这是第二种方法的示例,buy_now 由指针采用:

int milk(..., int* buy_now_ptr) {
    if (item_sale == 1) {
        *buy_now_ptr = legal_cards[0];
        return TRUE;
    }
    return FALSE;
}

【讨论】:

    【解决方案2】:

    嗯,你可以返回一个包含两个数字的数组。

    【讨论】:

    • 不能在 C 中返回数组。
    【解决方案3】:

    要从函数返回多个值,请创建一个结构,将任何您想要的成员放入其中并返回结构变量。例如

    typedef struct buy_fun_info {
       int  item_used;
       int buy_now;
    }BUY;
    

    array_checker() 函数中,创建上述结构的变量,填充成员并返回。例如

    BUY array_checker() { /*array_checker() function */
       BUY obj;
       obj.buy_now = legal_cards[0];
       obj.item_used = FALSE;
    
       return obj;/* return structure variable */   
    }
    

    上面我尝试用示例来解释,你需要做相应的修改。

    【讨论】:

      【解决方案4】:

      您必须定义要返回的结构:

      struct itemStuff {
          int itemUsed;
          int buy_now;
      }
      

      然后

      struct itemStuff myItemFunction(...) {
          struct itemStuff myItem;
      
          (...)
      
          if (item_sale == 1) {
              myItem.item_used = TRUE;
              myItem.buy_now = legal_cards[0];
          } else {
              myItem.item_used = FALSE; 
          }
      
          return myItem;
      }
      

      函数的调用者必须创建相同的结构来接收返回数据

      struct itemStuff thisItem = myItemFunction(...);
      

      或使用传递引用传递可修改的参数

      void myItemFunction(..., int *item_used, int *buy_noe) {
          if (item_sale == 1) {
              *item_used = TRUE;
              *buy_now = legal_cards[0];
          } else {
              *item_used = FALSE; 
          }
      }
      

      这里,调用者必须传入要设置的两个整数的地址:

      int used;
      int buy;
      
      myItemFunction(..., &used, &buy);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-22
        • 1970-01-01
        • 2022-10-14
        相关资源
        最近更新 更多