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); } |
运行结果:
------------------------------------
承接
**视觉检测软件开发及调试
**工业软件开发
**上位机软件开发
wechat:luoran2024
qq:565934058
email:taoyuansu@qq.com
海量教育资源及影视资源下载
微信公众号:EFun科技
------------------------------------
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战