Rust: &,clone,Box,Arc 的address
来源:互联网 发布:自动拨号软件 编辑:程序博客网 时间:2024/06/07 18:49
一、&
println!(); let temp = 500_i32; //stack println!("&temp : {:p}", &temp); println!("&&temp : {:p}", &&temp); println!("&&&temp : {:p}", &&&temp); println!("&&&&temp : {:p}", &&&&temp); let arr = vec!["a", "b", "c", "d"]; // heap println!(); println!("&arr : {:p}", &arr); println!("&&arr : {:p}", &&arr); println!("&&&arr : {:p}", &&&arr); println!("&&&&arr : {:p}", &&&&arr);
output:
二、原始数据及clone
//原始数据let mut array: [&str; 4] = ["a", "b", "c", "d"];let mut num = 5_f32;//clonelet array_clone = array.clone(); //clone:address和原来的不一样let num_clone = num.clone();//clone:address和原来的不一样
三、不同情况下array的address
println!("&array address :{:p}", &array); println!("&array_clone address :{:p}", &array_clone); let array_new = &mut array;// address不发生变化 let array_new_clone = array_new.clone(); //address发生变化 println!("array_new address :{:p}", array_new); println!("&array_new address :{:p}", &array_new); println!("&array_new_clone address:{:p}", &array_new_clone); println!();
四、不同情况下num的address
//&println!("&num address :{:p}", &num);println!("&num_clone address :{:p}", &num_clone);//&mut,clonelet num_new = &mut num; // address不发生变化let num_new_clone = num_new.clone();// address发生变化// outputprintln!("num_new address :{:p}", num_new);println!("&num_new address :{:p}", &num_new);println!("&num_new_clone address :{:p}", &num_new_clone);
output:
五、Box
let mut bx = Box::new(5_f32); let mut bx_new = &bx; let mut bx_new_clone = bx_new.clone(); println!("bx <value> address : {:p}", &*bx);//box中5_f32的地址 println!("bx address : {:p}", &bx);//指针的指针 println!("bx_new address : {:p}", &bx_new); println!("bx_new_clone address: {:p}", &*bx_new_clone);
output:
六、Arc
以下例子参考RustPrimer
use std::thread;use std::sync::Arc;fn main() { let var : Arc<i32> = Arc::new(5); let share_var = var.clone(); // 创建一个新线程 let new_thread = thread::spawn(move|| { println!("share value in new thread: {}, address: {:p}", share_var, &*share_var); }); // 等待新建线程先执行 new_thread.join().unwrap(); println!("share value in main thread: {}, address: {:p}", var, &*var);}
output:
share value in new thread: 5, address: 0x2825070share value in main thread: 5, address: 0x2825070
阅读全文
0 0
- Rust: &,clone,Box,Arc 的address
- (转)Rust: Rust的 Deref 运算符
- Rust : Box 为什么这里并不需要拆箱?
- rust的一些细节
- 调试rust的宏
- 1. rust的优点
- rust的Iterator
- rust 的内存管理
- Rust的注释
- Rust 的功能函数
- Rust : 独一无二的Some
- Rust : 高富帅的match
- rust
- Rust与D 的PK
- Rust的包管理器Cargo
- rust默认赋值的方法
- rust compile plugin的使用方法
- Rust的“并发安全”设计
- docker 安装pinpoint
- 类和接口
- STM32中RCC时钟简介
- 在Nodejs中使用JSON WEB Tokens
- Cf592D Super M
- Rust: &,clone,Box,Arc 的address
- EasyPlayer RTSP播放器:一个适用于安防行业的工具利器(EasyPlayer Windows v2.0.17.0709)
- Android View — Paint 详解
- JavaScript对象的获取以及字符串的基本应用
- 学linux的第二天
- 工厂模式
- 谈谈学习java的感受!
- linux系统学习
- Android 检测手机多点触摸点数