Rust 02.控制、引用、切片Slice

1.控制流

//rust通过所有权机制来管理内存,编译器在编译就会根据所有权规则对内存的使用进行
//堆和栈
//编译的时候数据的类型大小是固定的,就是分配在栈上的
//编译的时候数据类型大小不固定,就是分配堆上的
fn main() {let x: i32 = 1;{let y: i32 = 1;println!("x = {}", x);println!("y = {}", y);}{let s1 = String::from("hello");//s1.push_str(" world");println!("s1 = {}", s1); //String类型离开作用域的时候会调用drop方法let s2 = s1; //浅拷贝 只是拷贝了指针, 数据并没有拷贝println!("s2= {}", s2);//println!("s1= {}", s1); //s1在被copy后会自动释放指针内存,所以会报错//clone 深拷贝数据let s3 = s2.clone();println!("s3= {}", s3);println!("s2= {}", s2);}

在这里插入图片描述

控制权

fn takes_ownership1(some_string: String){println!("{}", some_string);
}fn takes_ownership2(some_string: String) -> String{println!("{}", some_string);some_string
}fn makes_copy(i: i32) {println!("i = {}", i);
}fn main() {let s = String::from("hello");//takes_ownership1(s); //s在调用函数后被drop,后续无法打印其值//println!("{}", s);let s2 = takes_ownership2(s);println!("{}", s2);let x = 5;makes_copy(x);println!("{}", x);println!("Hello, world!");
}

2.引用

//引用: 用法&,
//让我们创建一个指向值的应用,但是并不拥有它,因为不拥有这个值,所以,当引用离开其值指向的作用域后也不会被丢弃
fn calcute_length(s: &String) ->usize {s.len()
}//借用:&mut 可以修改字符串,同时不会执行drop操作
fn modify_s(s: &mut String) {s.push_str(", world");
}fn dangle() -> &String {let s = String::from("hello");&s
}fn main() {let mut s1 = String::from("hello");//在任意给定时间,有了可变引用之后不能再有不可变引用let r1 = &s1;let r2 = &s1;println!("{}, {}", r1, r2);let r3 = &mut s1;r3.push_str(", world");//println!("{}, {}", r1, r2); 由于r3为 可变引用, r1,r2不能在这里使用,必须在r3之前使用//引用不能为空,dangle()中给s赋值结束后就drop了,最终返回了空指针,这是不合法的//let ref_s = dangle();//println!("{}", ref_s);
}

Slice

//1、字符串slice是String中一部分值的引用
//2、字面值就是slice
//3、其它类型slice
fn main() {let s = String::from("hello world");let h = &s[0..5]; 	//区间[0,5)let h = &s[0..=4]; 	//区间[0,4]let h = &s[..=4]; 	//区间[0,4]let h = &s[..5]; 	//区间[0,5)println!("h = {}", h);let w = &s[6..11];  //区间[6,11)let w = &s[6..=10]; //区间[6,10]let w = &s[6..];  	//区间[6,s.len())let w = &s[..]; 	//区间[0,s.len())println!("w = {}", w);//let ss = String::from("你好");//let w1 = &ss[0..1];let a = [1, 2, 3, 4];	let sss = &a[1..3];		//取a中[1,3)的元素println!("sss = {}", sss[0]);	//a[1]println!("sss = {}", sss[1]);	//a[2]println!("len = {}", sss.len());	//长度为2
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/774272.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++多线程编程题

写在前面:最近练习C多线程,从网上其他博客找的一些小编程题。代码是自己写的,主要是个人复习用,如果有问题,欢迎在评论区讨论。 1.编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C&#x…

tar (child): bzip2: Cannot exec: No such file or directory

当您在解压或压缩文件时遇到类似“tar (child): bzip2: Cannot exec: No such file or directory”的错误信息,这意味着tar命令试图调用bzip2程序来处理.bz2格式的压缩文件,但系统上没有找到这个程序。为了解决这个问题,您需要安装bzip2工具。…

图片格式转换:快速将PNG转换为JPG的步骤

在我们的日常生活中,经常会遇到需要改变图片格式的情况,有时候,我们可能需要将PNG格式的图片转换为jpg格式,以适应不同的需求和应用场景;本文将介绍哥实用的方法和工具,帮助您顺利将png图片转换为jpg格式。 压缩图网站…

C# 接口 interface

https://www.bilibili.com/video/BV1584y1B7xe/ 在C#中,接口(Interface)是一种引用类型,它定义了一组方法的契约,但不包含实现。接口允许不同的类实现相同的方法集,从而使它们可以以一致的方式被其他代码使…

面试经验分享 | 蓝队面试经验

关于蓝队面试经验 1.自我介绍能力 重要性 为什么将自我介绍能力放在第一位,实际上自我介绍才是面试中最重要的一点,因为护网面试并没有确定的题目,让面试官去提问 更多是的和面试官的一种 “交谈” ,面试的难易程度也自然就取决…

【第三方登录】Twitter

创建应用 APPID 和 相关回调配置 重新设置api key 和 api secret 设置回调和网址 还有 APP的类型 拿到ClientID 和 Client Secret 源码实现 获取Twitter 的登录地址 public function twitterUrl() {global $db,$request,$comId;require "inc/twitter_client/twitte…

Springboot整合瀚高

需要下载highgo驱动,然后将jar包打入进自己本地maven中 下载地址: highgi6.2.4 1.打开jar包所在的文件,然后在该文件夹中打开命令窗口(或者先打开命令窗口,然后cd到jar所在文件夹) install-file -Dfile:jar包名Dart…

腾讯VS网易:一场不见终局的游戏未来之战

国内游戏霸主腾讯最近赚足了眼球。 总体上看,腾讯手握“游戏社交”两大王牌,最近发布的财报十分亮眼,其2023年总营收和净利润分别同比增长10%和36%,展现了互联网巨头的强劲活力。 然而巨头亦有焦虑,增值服务营收同比…

FASTAPI系列 14-使用JSONResponse 返回JSON内容

FASTAPI系列 14-使用JSONResponse 返回JSON内容 文章目录 FASTAPI系列 14-使用JSONResponse 返回JSON内容前言一、默认返回的JSON格式二、JSONResponse 自定义返回三、自定义返回 headers 和 media_type总结 前言 当你创建一个 FastAPI 接口时,可以正常返回以下任意…

Prompt Engineering的4 种方法

此为观看视频 4 Methods of Prompt Engineering 后的笔记。 从通用模型到专用模型,fine tuning(微调)和prompt engineering(提示工程)是2种非常重要的方法。本文深入探讨了prompt engineering的4种方法。 首先&#…

23届嵌入式被裁,有什么好的就业建议?

最近看到了一个提问,原话如下: 本人23届毕业生,就业方向嵌入式软件,坐标深圳,工作3月公司裁员,目前接近12月开始找工作。 boss上投递简历,校招岗,比较有规模的好公司基本已读不回&am…

OM6626一款低功耗蓝牙芯片SOC芯片 -电子价签蓝牙芯片

OM6626是一个功耗优化的SOC芯片,它具有低能耗和专有的2.4ghz应用。它集成了一个高性能和低功耗的射频收发器与蓝牙基带和丰富的外设扩展。OM6626还集成了PMU (power management unit),提供高效的电源管理。它的目标是24ghz蓝牙低能耗系统、专有2.4ghz系统…

你的 Python 代码需要解释一下了!

Python 是一种相对简单的编程语言。它主要以解释型语言著称,这意味着每行代码都要通过解释器逐行执行。不过在某些时候,将 Python 代码翻译成计算机可以理解的内容,然后再逐行执行,可以减少繁琐。 在这种情况下,编译器…

VRAY渲染设置大神参数(建议收藏)

3dmax效果图云渲染平台——渲染100以3ds Max 2024、VR 6.2、CR 11.2等最新版本为基础,兼容fp、acescg等常用插件,同时LUT滤镜等参数也得到了同步支持。注册填邀请码【7788】可领30元礼包和免费渲染券哦~ 公用:输出大小:一般小图50…

【测试篇】软件测试的基本概念

什么是需求什么是bug什么是测试用例开发模型和测试模型 什么是需求 需求定义:包含用户需求和软件需求 用户需求:可以简单理解为甲方提出的需求,如果没有甲方,那么就是终端用户使用产品时必须要完成 的任务。 软件需求&#xff1…

小白一次过软考高级(信息系统项目管理师)秘籍,请收藏!!!

作为一位软考老司机,我觉得我还是有资格说一说的。 我的考试成绩: 高级软考考试基础信息: 考试科目:总共分为3科,综合知识、案例分析、论文 成绩:满分75分,45分及格,需同时通过3科…

正则表达式 vs. 字符串处理:解析优势与劣势

title: 正则表达式 vs. 字符串处理:解析优势与劣势 date: 2024/3/27 15:58:40 updated: 2024/3/27 15:58:40 tags: 正则起源正则原理模式匹配优劣分析文本处理性能比较编程应用 1. 正则表达式起源与演变 正则表达式(Regular Expression)最早…

LangChain入门:3.调用OpenAI的聊天机器人-入门

内容 本次入门内容是调用OpenAI的聊天机器人功能。 实现原理是使用OpenAI提供的API,通过向其发送请求来生成回复文本。 首先,导入ChatOpenAI类,这个类是用于实现与OpenAI聊天机器人交互的。 pip install langchain-openai2. 编写调试代码 …

python基于django的高校迎新系统 flask新生报到系统

系统的登录界面和业务逻辑简洁明了,采用一般的界面窗口来登录界面,整个系统更加人性化,用户操作更加简洁方便。本系统在操作和管理上比较容易,还具有很好的交互性等特点,在操作上是非常简单的。因此,本系统可以进行设计…

Go——结构体

Go语言中没有类的概念,也不支持类的继承等面向对象的概念。Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性。 一. 类型别名和自定义类型 1.1 自定义类型 在Go语言中有一些基本的数据类型,如string,整型,…