注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
lugl4313820的个人空间 https://home.eeworld.com.cn/space-uid-1269709.html [收藏] [复制] [分享] [RSS]
日志

《Rust实战》引用

已有 420 次阅读2024-4-18 12:55

引用是一个用于指代另一个值的值。

文中举了一个例子,在使用一个大数组时,如果要复制,那开销很大,‘引用’就是创建一个副本,有些象C中的地址,只需要把副本的头地址指向这里就行,但是好象Rust的引用,只能读,还没有看到怎么写的例子。

有程序来加深印象:

fn main() {
    let a = 42;
    let r = &a;
    let b = a + *r; //实现a 与 a 相加(通过解引用),并将结果赋值给b
    println!(" a + a = {}",b);
}

输出结果:

liujianhuadeiMac:samp2_3 liujianhua$ cargo run
   Compiling samp2_3 v0.1.0 (/Users/liujianhua/Rust/samp2_3)
    Finished dev [unoptimized + debuginfo] target(s) in 3.29s
     Running `target/debug/samp2_3`
 a + a = 84

这个例子,实现了引用 ‘&’,解引‘*’,感觉就是C的指针,但又有根本的不同。

再有例子,数字类型数组,查找一个数字

fn main() {
    let needle = 0o204;
    let haystack = [1,1,2,5,15,52,132,877,4140,21147];
    for item in &haystack {
        if *item == needle {
            println!("{}", item);
        }
    }
}

在这个例子中,使用引用 haystack数组这生成跌代for循环,再使用*item来解引用。

执行结果如下:

liujianhuadeiMac:samp2_3 liujianhua$ cargo run
   Compiling samp2_3 v0.1.0 (/Users/liujianhua/Rust/samp2_3)
    Finished dev [unoptimized + debuginfo] target(s) in 0.37s
     Running `target/debug/samp2_3`
132

【总结】

这次学习了Rust的引用,与解引,来实现特定的功能。如果有C指针地址的基础应该非常好理解。

本文来自论坛,点击查看完整帖子内容。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章