尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Rust vec动态数组的索引与借用

Rust vec动态数组的索引与借用
📅 发布时间:2026/6/20 17:31:46

对于rust中的元素,可以是Copy类型和非Copy类型,从而导致在元素访问时存在不同的底层逻辑。
首先,对于vec[idx],返回的是引用&T
对于Copy类型:

    let mut ve=vec![1,2,3];let it=vec[1];//copyprintln!("{}", it32);

it的类型是int32而非&int32,因为:
vec[1]是a place expression,
let it=vec[1]; is evaluated in a value expression context
If the type of that value implements Copy, then the value will be copied.
所以i32会被copy给it
https://doc.rust-lang.org/reference/expressions.html

    let mut ve=vec![1,2,3];println!("{:#p}",vei32.as_ptr());let it32r = &vei32[0];//it32r 值为直接对vec第二个元素的借用println!("{:p}", it32r);//vei32.as_ptr()与it32r地址相同

it32r 值为直接对vec第二个元素的借用,原因:
The & (shared borrow) and &mut (mutable borrow) operators are unary prefix operators.
When applied to a place expression, this expressions produces a reference (pointer) to the location that the value refers to.
所以vei32[0]返回借用,&vei32[0]直接获取元素地址仍是借用。
https://doc.rust-lang.org/reference/expressions/operator-expr.html#borrow-operators

    let mut ve=vec![1,2,3];let it32r = &vei32[0];vei32.push(4);//报错://cannot borrow `vei32` as mutable because it is also borrowed as immutable //mutable borrow occurs hereprintln!("{:p}", it32r);

原因分析:对于vec,vec[idx]相当于vec的buffer的切片,所以&vei32[0]虽然是对第一个元素的借用,但也是对整个buffer的借用,所以会导致vei32.push(4);报错。
对于非Copy类型:

    let mut vec=vec![String::from("a"),String::from("b"),String::from("c")];let it = vec[1];//cannot move out of index of `Vec<String>`//move occurs because value has type `String`, which does not implement the `Copy` trait

所以对于非Copy类型元素,对索引需要借用:

    let mut vec=vec![String::from("a"),String::from("b"),String::from("c")];let it = &vec[1];vec.push(String::from("value"));//cannot borrow `vec` as mutable because it is also borrowed as immutable//mutable borrow occurs here//同上

相关新闻

  • 2025年11月继电器厂家选购指南:高性价比解决方案对比
  • 题解:P1471 方差
  • 2025 年 11 月中国水泵厂家权威推荐榜:消防/多级/自吸/磁力/排污/真空/离心/卧式水泵全品类实力解析与高效选购指南

最新新闻

  • 用OpenClaw做自动化数据采集:定时抓竞品+自动入库+日报推送,解放双手
  • 嵌入式GUI多语言支持实战:emWin资源管理与驱动适配详解
  • Django Models 深度解析:从字段设计到迁移执行的工程实践
  • 终极揭秘:如何用FModel轻松解锁游戏资源提取神器
  • B站会员购抢票实战:如何用Python自动化工具突破抢票限制?
  • Gemma 4 12B QAT+MTP小显存部署实战指南

日新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号