【问题标题】: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;
}
【解决方案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);