Rust--数据操作/作用域

1.存放于栈中数据

  a.以下数据类型数据存放于栈中(数据长度确定类型):

    *所有整数类型,如u32,i32,i128等

    *bool型

    *char

    *浮点型,f32/f64

    *仅包含整型/bool/char/浮点型数据的元组

  b.存放于栈中数据,每个变量均有单独的存储地址;

    如let  a = 1;

     let  b = a;    //仅仅只是将不可变变量a中数据1拷贝赋值给不可变量b

 

2.存放于堆中数据

  数据长度不确定数据类型,如String;

  a.如 let s1 = String::from("efun");

       let s2 = s1;    //从此开始,s1不能再使用

 

   数据“efun”存放于堆中;

   执行完语句let s2 = s1;后,不可变变量s2重新指向堆中数据“efun”,同时s1指向“efun”的指向无效;

  b.若要实现s1/s2,都拥有数据“efun”,可以使用克隆方式,如下:

    let s1 = String::from("efun");

    let s2 = s1.clone();     //由此开始,s1依然能够使用

   克隆方式情况下,可理解为在堆中,复制一个“efun”数据,相当于堆中拥有两个数据“efun”

  c.若要实现s1/s2,都拥有数据“efun”,同样可以使用引用方式:

    let s1 = String::from("efun");

    let s2 = &s1;  ////由此开始,s1依然能够使用

    引用可以理解为s2引用s1指向堆中数据“efun”的索引

    此种引用情况下,s2的值不可以作更改;

  d.若s2的值需要作修改,可如下操作:

    

fn main() {
    let mut s1 = String::from("efun");
  let s2 = &mut s1;
  s2.push_str("echo");
    println!("{}",s2);
}

运行结果:

  e.可变引用不可多重引用;不可变引用,可多重引用;如下:

      

1
2
3
4
5
6
7
fn main() {
    let mut s1 = String::from("efun");
    let s2 = &mut s1;
    let s3 = &mut s1;
    s2.push_str("echo");
    println!("{} {}",s2,s3);
}

 不能多重引用,出现如下报错

 

 运行如下不可变量的多重引用:

1
2
3
4
5
6
7
fn main() {
    let s1 = String::from("efun");
    let s2 =  &s1;
    let s3 =  &s1;
    //s2.push_str("echo");
    println!("s2={} s3={}",s2,s3);
}

 运行结果:

 

posted @   echo-efun  阅读(107)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示