【一起学Rust 基础篇】Rust基础——变量和数据类型_rust 变量指定数据类型(3)

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

let mut x: i32 = 5;
print!("The value of x is: {}", x);
x = 6;
print!("The value of x is: {}", x);

 此时我们继续运行看看,


![](https://img-blog.csdnimg.cn/6d10ea86f46a4b7cb60b135b15ed94b3.png)


因此我们得出结论,Rust的变量默认是不可变的,只有添加mut关键字以后才会变得可变。 



## 三、Rust基本数据类型


### 1.数值类型


数值类型又分为整数型、浮点数、序列类型。


#### 整型




|  |  |  |
| --- | --- | --- |
| **长度** | **有符号** | **无符号** |
| 8-bit | i8 | u8 |
| 16-bit | i16 | u16 |
| 32-bit | i32 | u32 |
| 64-bit | i64 | u64 |
| 128-bit | i128 | u128 |
| arch | isize | usize |


其中,每个长度都有有符号和无符号两种,有符号表示这个数分正数和负数,无符号则表示这个数据类型只有正数。


有符号的整型取值范围是


![](https://img-blog.csdnimg.cn/354dc3379e534ddd9f026e5c1ee76e40.png)


 其中n是长度。


另外,`isize` 和 `usize` 类型依赖运行程序的计算机架构:64 位架构上它们是 64 位的, 32 位架构上它们是 32 位的。


同时也支持用不同的形式表示不同进制的字面量。




| 数字字面值 | 例子 |
| --- | --- |
| Decimal (十进制) | `98_222` |
| Hex (十六进制) | `0xff` |
| Octal (八进制) | `0o77` |
| Binary (二进制) | `0b1111_0000` |
| Byte (单字节字符)(仅限于`u8`) | `b'A'` |


#### 浮点型


Rust 也有两个原生的 **浮点数**类型,它们是带小数点的数字。Rust 的浮点数类型是 `f32` 和 `f64`,分别占 32 位和 64 位。浮点数采用 IEEE-754 标准表示。`f32` 是单精度浮点数,`f64` 是双精度浮点数。默认类型是 `f64`,因为在现代 CPU 中,它与 `f32` 速度几乎一样,不过精度更高。所有的浮点型都是有符号的。以下是使用浮点型的实例。



fn main() {
let x = 2.0; // f64

let y: f32 = 3.0; // f32

}



### 2.字符类型


和C语言一样,char也是Rust的原生类型。但是与之不同的是,Rust的char类型是Unicode的,支持更多的字符,以下是使用字符类型的例子,(如果你能复制到梵文,连梵文也能编码了。)



fn main() {
let c = ‘z’;
let z: char = ‘ℤ’; // 指定变量类型
let heart_eyed_cat = ‘😻’;
}


要注意分清楚字符和字符串,字符使用的是单引号,字符串使用的是双引号。 


### 3.布尔类型


Rust 中的布尔类型有两个可能的值:`true` 和 `false`。Rust 中的布尔类型使用 `bool` 表示。例如:



fn main() {
let t = true;

let f: bool = false; // 指定变量类型

}


### 四、复合类型


**复合类型**可以将多个值组合成一个类型。Rust 有两个原生的复合类型:元组(tuple)和数组(array)。


#### 元组


元组是一个将多个其他类型的值组合进一个复合类型的主要方式。可以将多个不同类型的值进行复合,**但是**元组长度固定:一旦声明,其长度不会增大或缩小。



fn main() {
let tup1 = (500, 6.4, 1);
let tup2: (i32, f64, u8) = (500, 6.4, 1); // 指定类型
}


同时元组也支持**解构**操作 



fn main() {
let tup = (500, 6.4, 1);

let (x, y, z) = tup;

println!("y的值是: {y}");

}


访问元组的值是使用元素在元组中的索引来访问的,**索引是从0开始的**,与数组是一样的



fn main() {
let x: (i32, f64, u8) = (500, 6.4, 1);

let x1 = x.0;

let x2 = x.1;

let x3 = x.2;

}



#### 数组


与元组不同,数组中的每个元素的**类型必须相同**。Rust 中的数组与一些其他语言中的数组不同,Rust中的**数组长度是固定的**。使用方式如下



fn main() {
let a = [1, 2, 3, 4, 5];
let months = [“January”, “February”, “March”, “April”, “May”, “June”, “July”,
“August”, “September”, “October”, “November”, “December”];
}


同时也可以指定元素类型



let a: [i32; 5] = [1, 2, 3, 4, 5];


如果初始化数组里面的值都是一样的,那么就有种简便的写法,如下,创建了一个数组a,其中有5个元素,这五个元素都是整数型3



let a = [3; 5];


 访问数组中的元素也是同其他编程语言一样



fn main() {
let a = [1, 2, 3, 4, 5];

let a1 = a[0];
let a2 = a[1];

}


但是要注意,不要尝试越界访问数组元素,也就是说,要访问数组长度内的元素。 


## 五、常量


常量与不可变量是类似的,但是是不同的。*常量(constants)* 是绑定到一个名称的不允许改变的值。


* 不可变量是默认不可变
* 常量是总是不能变
* 常量可以在任何作用域中声明
* 常量只能被设置为常量表达式,而不可以是其他任何只能在运行时计算出的值


申明一个常量要用**const**



fn main() {
const THREE_HOURS_IN_SECONDS: u32 = 60 * 60 * 3;
}




---


## 总结


以上就是本期所要讲述的内容了。本期主要讲了


* 变量的定义
* 变量的可变性
* 基本变量类型
	+ 整型
	+ 布尔型
	+ 字符型
* 复合型
	+ 数组
	+ 元组
* 常量


虽然很努力的组织内容了,但还是感觉不是很合理,在后期一定要调整,方便新手入门,让更多人能够学到Rust。



## **作业**


完成以下作业是你学好rust的重要组成部分。以下题目摘自《Rust练习实践》


#### 变量只有初始化了才可以使用



// 修复下面代码的错误并尽可能少的修改

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

95766610)]
[外链图片转存中…(img-rzZnX7ta-1714995766610)]
[外链图片转存中…(img-difNfATs-1714995766611)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值