You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让自定义函数返回两个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:21:18