吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 184|回复: 0
收起左侧

[学习记录] rust学习记录3-变量及数据类型

[复制链接]
comewithyou1996 发表于 2024-11-30 01:38
本帖最后由 comewithyou1996 于 2024-11-30 01:43 编辑

声明变量使用let关键字(不再像C语言那样使用int,float等关键字,但是字符串类型有单独的声明方式),默认情况下变量是不可变(Immutable)的。
但是不可变的变量和常量也是有区别的。所谓常量,是在绑定值以后也是不可变的。常量有以下特点:常量不可以使用mut,常量永远都是不可变的,声明常量使用const关键字,它的类型必须被标注。常量可以在任何作用域内进行声明,包括全局作用域。常量只可以绑定到常量表达式,无法绑定到函数的调用结果或只能在运行时才能计算出的值。在程序运行期间,常量在其声明的作用域内一直有效。

Rust里常量使用全大写字母,每个单词之间用下划线分开,例如:
const MAX_POINTS:u32 = 100_000;

再介绍一个概念Shadowing(隐藏)
可以使用相同的名字声明新的变量,新的变量就会shadow隐藏之前声明的同名变量,在后续的代码中这个变量名代表的就是新的变量。
shadow和把变量标记为mut是不一样的,如果不使用let关键字,那么重新给非mut的变量赋值会导致编译时错误,而使用let声明的同名新变量,也是不可变的。使用let声明的同名新变量的类型可以与之前不同。
shadowing的时候不同类型可以赋值,mut的时候不行。(这里使用shadowing就是两次给同一个变量名赋值前面都加上let,不是用shadowing就是第一次声明的时候用let,第二次不使用let了)

rust是静态编译语言,在编译时必须知道所有变量的类型。基于使用的值,编译器通常能够推断出它的具体类型,但如果可能的类型比较多,例如把string转为整数的parse()方法,就必须添加类型的标注,否则编译会报错。

rust中标量类型代表一个单个的值,rust有四个主要的标量类型:整数、浮点、布尔、字符。

整数类型包括有符号整数(i开头)和无符号整数(u开头),例如最常用的就是i32和u32类型。除了byte类型外,所有的数值字面值都允许使用类型后缀,例如65u8。
整数的默认类型就是i32,因为速度很快。但是要注意整数溢出问题。u8的范围是0-255,如果设置为256,那么在调试模式下,rust会检查出整数溢出,发生panic。在release模式下,rust不会检查可能导致panic的整数溢出,如果发生溢出,就会执行环绕操作,256变成0,257变成1,以此类推。

字符类型在rust中被用来描述单个字符,字符类型的字面值使用单引号,占用4字节大小,每个字符是Unicode标量值,但是Unicode中并没有字符的概念,所以直觉上认为的字符可能与rust中的概念并不相符。

复合类型是指可以将多个值放在一个类型里的类型,在rust中复合类型有元组tuple和数组两种。
元组可以将多个类型的值放在一个类型里,长度是固定的,一旦声明就无法改变。创建元组是通过小括号进行的,用逗号分隔,可以使用模式匹配来解构一个元组来获取元素的值。
数组也可以将多个值放在一个类型里,但是每个元素的类型必须相同,数组的长度也是固定的。声明数组的方式是通过中括号进行的,各个值也是通过逗号分开。如果想让你的数据存放在stack上而不是heap上,可以使用数组。
后面还会介绍vector类型,它与数组相比,长度可变,在leetcode上刷题常用vector类型。
声明数组有两种方式:
方式一:let a:[i32;5] = [1,2,3,4,5];其中等号左边方括号的意义是[类型;长度]
方式二:let a = [3;5];在中括号中指定初始值和长度,相当于let a = [3,3,3,3,3]
可以使用索引来访问数组的元素,如果索引超出了数组的范围,编译会通过但是运行会panic

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-1-5 06:33

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表