2115|5

6969

帖子

11

TA的资源

版主

楼主
 

《Rust实战》引用 [复制链接]

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

文中举了一个例子,在使用一个大数组时,如果要复制,那开销很大,‘引用’就是创建一个副本,有些象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指针地址的基础应该非常好理解。

此帖出自编程基础论坛

最新回复

楼主分享的Rust语言基础知识进度好快啊,有哪位朋友能分析分析与C++语言的引用和指针的特点吗   详情 回复 发表于 2024-4-21 09:26
点赞 关注
 

回复
举报

1375

帖子

1

TA的资源

五彩晶圆(初级)

沙发
 

嗯嗯嗯,rust是不是还有一个ref的写法,也表示引用?

老实讲,和c的指针的根本不同,还没有理解

此帖出自编程基础论坛

点评

还没有学到后面呀,这一天只能看这么多。难呀!  详情 回复 发表于 2024-4-19 14:05
 
 
 

回复

1375

帖子

1

TA的资源

五彩晶圆(初级)

板凳
 

let s = "Hello, world!";

IDE自动语法补全,会发现,s的类型是&str

也就是说,s是引用

此帖出自编程基础论坛
 
 
 

回复

6969

帖子

11

TA的资源

版主

4
 
hellokitty_bean 发表于 2024-4-19 10:00 嗯嗯嗯,rust是不是还有一个ref的写法,也表示引用? 老实讲,和c的指针的根本不同,还没有理解

还没有学到后面呀,这一天只能看这么多。难呀!

此帖出自编程基础论坛
 
 
 

回复

7608

帖子

18

TA的资源

五彩晶圆(高级)

5
 

这个 & 和 * 很C++

此帖出自编程基础论坛
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

755

帖子

5

TA的资源

纯净的硅(高级)

6
 

楼主分享的Rust语言基础知识进度好快啊,有哪位朋友能分析分析与C++语言的引用和指针的特点吗

此帖出自编程基础论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表