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

如何使用range based for loop接收输入及修改数组值无效问题解析

范围for循环无法修改原数组的核心原因

你代码中for(auto x:arr)的写法里,auto x会拷贝数组当前迭代的元素值到临时变量x中,你在循环内对x的所有修改都只会作用在这个临时拷贝上,完全不会影响原数组的存储内容,所以最后打印数组还是原来的初始值。

范围for循环的内部运行逻辑

针对你用的数组类型,C++的范围for循环会被编译器展开为等价的普通for循环逻辑:

// 原始写法:for(auto x:arr) { /* 循环体 */ }
int *begin = arr;
int *end = arr + 5; // 5是数组的长度,编译期自动推导
for(; begin != end; ++begin) {
    auto x = *begin; // 这里就是值拷贝的根源
    /* 你的循环体内容 */
}

你输入到x的值只会存在于每次迭代的临时变量里,迭代结束后临时变量就销毁了,原数组的元素*begin完全没有被改动。

正确读取输入的写法

如果需要修改原数组的元素,要把循环变量声明为左值引用,让x直接绑定到数组的元素上:

for(auto &x:arr) // 加&声明为引用
{
    cin >> x; // 此时修改x等价于修改原数组对应的元素
}

修改后重新运行程序,第三次打印的数组就会是你输入的新值了。

内容的提问来源于stack exchange,提问作者Pranshu_Taneja

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 20:54:04