rust编程学习(一):变量与数据类型

我们先从Rust基本的变量声明定义与数据类型开始学习,了解这门语言基本特性。 ## 1 变量与可变性 1. 变量声明 变量声明以let关键字开头,x为变量名,变量名后紧跟冒号和数据类型,但是rust编译器有自动推导变量类型的功能,可以省略显式的声明。 ```Rust let x:i32 = 10; //等价于 let x = 10; ``` 2. 默认变量是不可变的 只读状态 ```Rust let x = 10; x = 20;//错误❌ 不能对 不可变 变量进行赋值 ``` 3. 可变变量 mut关键字将变量x声明为可变变量,即x为可写状态 ```Rust let mut x=10;//x可变 x = 20; //修改变量值 ``` 4. 变量遮蔽(shadow) Rust允许在同一个代码块中声明一个与之前已声明变量同名的新变量,新变量会遮蔽之前的变量,即无法再去访问前一个同名的变量,这样就实现了变量遮蔽(类似于覆盖)。 ```Rust fn main() { let x = 3; let x = x * 2; println!("x: {}", x); //输出:x:6 let x = "Hello, Rust!"; println!("x: {}", x);//输出:Hello, Rust! } ``` 变量遮蔽的实质是通过let关键字声明了一个新的变量,只是名称恰巧与前一个变量名相同而已,但它们是两个完全不同的变量,处于不同的内存空间,**值**可以不同,**值的类型**也可以不同。 ## 2 常量定义 常量是指绑定到一个标识符且不允许改变的值,一旦定义后就没有任何方法能改变其值了。常量名通常是**大写字母**,且必须指定常量的**数据类型** ```Rust const MAX_NUM: u32 = 1024; ``` 常量与不可变变量对比: 1)常量声明使用const关键字,且必须注明值的类型。 2)常量不能遮蔽,不能重复定义。 3)常量可以在任何作用域中声明,包括全局作用域。 4)常量只能被赋值为常量表达式或数学表达式,不能是函数返回值,或是其他在运行时才能确定的值。 ## 3. 基本的数据类型 Rust的基本数据类型有整数类型、浮点数类型、布尔类型、字符类型、范围类型等。 ### 1. 整数类型 | 长度 | 有符合 | 无符号 | |:-:|:-:|:-:| | 8位 | i8 | u8| | 16位 | i16 | u16| | 32位 | i32 | u32| | 64位 | i64 | u64| | 128位 | i128 | u128| | arch | isize | usize| 定义与使用 ```rust let integer1: u32 = 17; // 显式类型声明 let integer2 = 17u32; // 类型后缀声明 let integer3 = 17; // 默认i32类型 let integer4: u32 = 0b10001; // 二进制 let integer5: u32 = 0o21; // 八进制 let integer6: u32 = 0x11; // 十六进制 let integer7 = 50_000; // 数字可读性分隔符_ ``` 为了方便阅读数值较大的数字,Rust允许使用下划线“_”作为虚拟分隔符来对数字进行可读性分隔。比如,为了提高50000的可读性,可以写成50_000。Rust在编译时会自动移除数字可读性分隔符“_”。 ### 2. 浮点数类型 >**f32**:单精度浮点数,小数点后至少有6位有效数字。 >**f64**:双精度浮点数,小数点后至少有15位有效数字。 定义与使用: ```rust let float1: f32 = 1.1; // 显式类型声明 let float2 = 2.2f32; // 类型后缀声明 let float3 = 3.3; // 默认f64类型 let float4 = 11_000.555_001; // 数字可读性分隔符_ ``` ### 3. bool(布尔)类型 Rust使用bool来声明布尔类型的变量,布尔类型只有两个可能的取值,即true或false。 例如: ```rust let t: bool = true; // 显式类型声明 let f = false; // 隐式类型声明 ``` ### 4. 字符类型 Rust使用UTF-8作为底层的编码。字符类型代表的是一个Unicode标量值(Unicode Scalar Value),包括数字、字母、Unicode和其他特殊字符。这个字符类型区别于C/C++中的定义,每个字符占4个字节。 ```rust let c = 'z'; let c1 = '✅'; ``` ### 5. 范围类型 范围类型常用来生成从一个整数开始到另一个整数结束的整数序列,有左闭右开和全闭两种形式,比如(1..5)是左闭右开区间,表示生成1、2、3、4这4个数字;(1..=5)是全闭区间,表示生成1、2、3、4、5这5个数字。 ```rust fn main() { print!("1-5: "); for i in 1..5 { print!("{} ", i); } println!(); } ``` ## 4 demo测试 编写一个简单的demo巩固上面的知识点。 命令:``cargo new demo1_datatype``创建工程。 ![](https://upload-images.jianshu.io/upload_images/29500887-0068198fa6f89b4c.png) 测试代码: ```rust fn main() { let x = 5; //默认类型i32 let x = x+1; //遮蔽x=5,此时x=6 println!("遮蔽变量 x={}", x); let mut y = 5; y += 10; //可变变量 println!("可变变量 y={}", y); const MAX_VALUE:i32=100*32; //常量 println!("MAX_VALUE={}", MAX_VALUE); let z:char = '》'; //字符类型 println!("字符类型 z={}, size={}字节", z, std::mem::size_of::()); let f = false; //布尔类型 println!("布尔类型 f={}", f); for i in 1..=5 { //for循环 范围类型 print!("{} ", i); } println!(""); } ``` 编译输出: ![](https://upload-images.jianshu.io/upload_images/29500887-1a5c17d6467b16d0.png) ## 5 小结 我们先从基础语法开始学习,循序渐进掌握它的精髓。此处我也给大家推荐一下rust官方教程链接: 我是小C,欢迎大家一起交流学习~~~ 本文由[mdnice](https://mdnice.com/?platform=6)多平台发布
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容