尝试用整数引用修改Rust向量值未生效,求技术解惑
理解Rust引用的可变与修改操作
你的代码没修改到向量元素的核心问题,出在对mut和引用的理解偏差上:
- 你写的
let mut i = &v[0];中,mut修饰的是引用变量i本身,意思是i可以被重新绑定到其他引用,但它指向的内容是不可变的(因为原向量v是不可变的)。 - 执行
i = &69;只是让i从指向v[0]改成指向字面量69,完全没触及向量内部的元素值,所以向量内容自然不变。
要真正修改向量里的元素,需要满足两个条件:
- 向量本身必须是可变的(用
let mut声明) - 获取的是可变引用(
&mut),然后通过解引用操作修改原地址的值
正确的代码示例:
// 创建可变的i32类型向量 let mut v = vec!(1, 2, 3, 4); // 获取索引0位置元素的可变引用 let i = &mut v[0]; // 通过解引用修改原向量的元素值 *i = 69; // 打印向量值 for x in v { println!("{}", x); // 输出 69, 2, 3, 4 }
补充关键概念:
- Rust的
mut具有针对性:要么让变量本身可被重新赋值,要么让引用指向的内容可被修改,二者是不同的。 - 要修改引用指向的内容,必须同时拥有可变的被引用对象和可变引用,并且通过
*解引用来操作原内存地址的值。
内容的提问来源于stack exchange,提问作者Karan Kumar
相关产品推荐
相关产品推荐

