如何让自定义函数返回两个int类型值?代码复用场景答疑
在C语言里要让函数返回多个值,最常用的有两种方案,刚好能完美适配你的需求——把那段重复代码封装到array_checker里,同时拿到item_used和buy_now两个int值。下面给你详细拆解每种方法的实现:
方法1:通过指针参数传递结果
这是C里最经典的多返回值实现方式:把需要输出的变量的地址传给函数,函数内部通过指针直接修改原变量的值。
第一步:定义array_checker函数
// 注意:要确保legal_cards是合法数组,且传入的指针不为NULL void array_checker(int item_sale, int* item_used, int* buy_now, int legal_cards[]) { if (item_sale == 1) { *item_used = TRUE; // 通过指针修改外部变量的值 *buy_now = legal_cards[0]; } else { *item_used = FALSE; // 重要:else分支必须给buy_now赋值,避免未定义行为 *buy_now = 0; // 可根据业务逻辑设置合适的默认值 } }
第二步:在juice/milk/buy函数里调用
以juice函数为例:
void juice(int item_sale, int legal_cards[]) { int item_used, buy_now; // 传入item_used和buy_now的地址 array_checker(item_sale, &item_used, &buy_now, legal_cards); // 直接使用这两个变量进行后续逻辑处理 if (item_used) { // 这里可以用buy_now做操作,比如调用其他函数 } }
方法2:返回自定义结构体
如果觉得指针传递不够直观,可以把两个int值打包成一个结构体,让函数返回这个结构体对象。这种方式在C99及以上标准完全支持,代码可读性更强。
第一步:定义结构体类型
在全局或函数外部先声明一个专门用来承载返回结果的结构体:
// 封装两个返回值的结构体 typedef struct { int item_used; int buy_now; } CheckResult;
第二步:实现array_checker函数
CheckResult array_checker(int item_sale, int legal_cards[]) { CheckResult result; // 声明结构体变量 if (item_sale == 1) { result.item_used = TRUE; result.buy_now = legal_cards[0]; } else { result.item_used = FALSE; // 同样要给buy_now设置默认值,避免未初始化问题 result.buy_now = 0; } return result; // 返回整个结构体对象 }
第三步:在juice/milk/buy函数里调用
void juice(int item_sale, int legal_cards[]) { // 直接接收结构体返回值 CheckResult result = array_checker(item_sale, legal_cards); // 使用结构体中的字段 if (result.item_used) { // 处理result.buy_now的逻辑 } }
关键注意事项
你原来的代码里else分支只设置了item_used = FALSE,但没有给buy_now赋值,这会导致它的值是随机的(未定义行为),一定要给它一个符合业务逻辑的默认值,比如合法的卡片索引或0。
内容的提问来源于stack exchange,提问作者Zoey Malkov
相关产品推荐
相关产品推荐

