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

C++给定示例代码如何通过传引用传出内层块局部sum变量值

代码修正方案

你原有代码存在几处语法和逻辑错误,结合你要通过引用将内层sum值传到外层的需求,修改后的实现如下:

核心修改点

  • 为函数新增int& output_sum引用参数,外层调用时传入对应int变量即可接收计算结果
  • 修正原有sum变量的错误定义:原有代码将其定义为int*指针类型且初始化为0,会触发空指针访问崩溃,改为普通int类型初始化为0
  • 修正内层循环的长度判断错误:sizeof(item[n-1])获取的是string类的固定内存大小,不是元素个数,改为遍历所选列的所有数据元素

修正后完整代码

// 新增第三个参数为int引用,用于向外层传递sum结果
void sum(vector<string> arr[], vector<string> columnName, int& output_sum)
{
    int n;
    // 初始化sum为0,避免脏值
    int sum = 0;
    cout << "Enter column number to calculate : ";
    cin >> n;
    cin.ignore(80, '\n');
    cout << columnName[n-1] << endl;
    // 选中要计算的列
    auto& selected_col = arr[n-1];
    if (selected_col[0] == "1") {
        // 从下标1开始遍历,跳过第一个可计算标识位
        for (int i = 1; i < selected_col.size(); i++) {
            sum += stoi(selected_col[i]);
            cout << sum << " ";
        }
        cout << endl << "块内计算得到的sum值:" << sum << endl;
        // 给引用参数赋值,外层传入的变量会同步更新
        output_sum = sum;
    } else if (selected_col[0] == "0") {
        cout << "Column can not be calculated" << endl;
        // 不可计算时给外层结果赋值为-1作为标识,可按需调整
        output_sum = -1;
    }
}

外层调用示例

int main() {
    // 此处省略你读取测试数据、填充arr和columnName的逻辑
    vector<string> arr[7];
    vector<string> columnName;
    // 外层定义接收结果的变量
    int cal_result = 0;
    // 传入变量的引用,函数内计算完成后cal_result会自动拿到sum值
    sum(arr, columnName, cal_result);
    cout << "外层拿到的计算结果:" << cal_result << endl;
    return 0;
}

可选替代方案:修改函数返回值

如果你不需要同时返回多个结果,直接修改函数返回值类型为int会更直观:

int sum(vector<string> arr[], vector<string> columnName)
{
    int n, sum = 0;
    // 中间计算逻辑和上述代码一致
    // ...
    return sum;
}
// 外层调用:int result = sum(arr, columnName);

内容的提问来源于stack exchange,提问作者AZERUL BIN BADRUL ISHAM

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 07:24:04