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.可变引用不可多重引用;不可变引用,可多重引用;如下:
fn main() {
let mut s1 = String::from("efun");
let s2 = &mut s1;
let s3 = &mut s1;
s2.push_str("echo");
println!("{} {}",s2,s3);
}
不能多重引用,出现如下报错

运行如下不可变量的多重引用:
fn main() {
let s1 = String::from("efun");
let s2 = &s1;
let s3 = &s1;
//s2.push_str("echo");
println!("s2={} s3={}",s2,s3);
}
运行结果:

------------------------------------
承接
**视觉检测软件开发及调试
**工业软件开发
**上位机软件开发
wechat:luoran2024
qq:565934058
email:taoyuansu@qq.com
海量教育资源及影视资源下载
微信公众号:EFun科技
------------------------------------

浙公网安备 33010602011771号