rust学习条记4-底子范例2和内存管理模子 [复制链接]
发表于 2025-10-26 13:24:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
rust和其他语言一样除了根本的整型、浮点型、布尔、字符外也有复合范例、聚集范例等复杂范例
1.复合范例数组和元组
数组不消过多先容,但元组不是全部语言都有,现在我学的语言只有python,rust有这个范例
与数组相比类似点:都是复合范例、长度都是固定的,差别点在于元组可以是差别范例的数据范例,数组必须同一范例的数据范例。
数组声明与使用
  1. fn main() {
  2.    //声明 a 是一个长度为 5 的整型数组
  3.    let a = [1, 2, 3, 4, 5];
  4.    //声明b 是一个长度为3的字符串数组
  5.    let b = ["python", "go", "rust"];
  6.    // 等同于 let c = [3, 3, 3, 3, 3];
  7.    let c = [3; 5];
  8.    //访问
  9.    println!("{}",a[0]);
  10.    //a[0] = 123; //同样如果没有mut:数组 a 不可变,不可改变里面的值
  11.    let mut a = [1, 2, 3]; //加了mut才能修改
  12.    a[0] = 4; // 正确
  13.    //循环遍历
  14.    for i in a.iter() {
  15.     println!("值为 : {}", i);
  16.    }
  17. }
复制代码
元组声明与使用
  1. fn main() {
  2.    //声明一个元组tuple
  3.    let tuple = (1, "beijing", true, 0.9);
  4.    //访问
  5.    println!("{}", tuple.0);
  6.    /*元组不可遍历和切片(这点与python中的元组有很大不同)
  7.     Rust中的元组不能直接进行遍历。元组是一个固定长度的、可以包含不同类型元素的复合类型。
  8.     不能使用for循环直接遍历元组,因为元组没有实现Iterator trait。
  9.     元组也不能像数组那样进行切片操作。只能通过索引来访问元组中的单个元素,索引从0开始,
  10.     使用点号(.)来访问,例如:tuple.0,tuple.1等。
  11.     如果你需要遍历或切片操作,有以下替代方案:
  12.         1.如果需要遍历,可以将元组转换为数组(要求数据类型相同)
  13.         2.如果元素类型相同,考虑使用数组或Vec替代元组
  14.         3.可以使用模式匹配来一次性获取多个元素
  15.     */
  16.     // 使用模式匹配解构元组
  17.     let(a,b,c,d) = tuple;
  18.     println!("a: {}, b: {}, c: {}, d:{}", a, b, c, d);
  19. }
复制代码
2.内存管理模子
其他语言内存管理方式
1.C/C++ 纯手工管理内存(缺乏安全抽象模子),容易堕落
2.以Java/Python/Go即是语言,接纳gc管理:垃圾接纳,固然内存安全
但是有(stop the world),对性能影响非常大
rust语言内存管理方式
1.思量性能,鉴戒c++的rall资源管理方式
2.思量安全:增长全部权语义
全部权的三大焦点规则
    1.每个值有且只有一个全部者
    值在恣意时间只能被一个变量拥有,全部者负责值的生命周期。
    2.全部者离开作用域时,值会被自动开释
    通过 Drop trait 自动调用清算代码(如开释内存)。
    3.全部权可通过赋值或函数转达转移(Move)
    赋值 let x = y; 或传参会转移值的全部权,原变量将失效(编译器确保安全)。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表