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
相关产品推荐
相关产品推荐

