RUST基础_01
变量
在rust语言中默认一切变量是不可变的
默认不可变是rust的一个优势,一旦变量是不可变也就意味着后续所有的对这个变量的写操作都是会编译不通过的;当然如果想让变量可变需要引入关键字 mut 来实现
fn main() {
let a = 10;
a = 100; //这行编译器这里会报错,无法多次将新值赋给不可变变量 [E0384]
// mut 关键字运行变量可变
let mut b = 10;
b = 100;
println!("b={}", b);
}
常量
常量不是默认不可变是一定不可变的,因为常量不能被mut关键字修饰,常量的声明是conste而不是let,并且常量是需要强制声明常量的类型的
const PI: f32 = 3.141592653589793;
fn main() {
let r:f32 = 5.0;
println!("{}", r*r*PI);
}
变量的遮蔽(Shadowing)
遮蔽是使用let关键字对同名量的变量重新赋值,后续所有的访问都是基于新赋的值,和使用mut对变量就行修改不同,使用mut是将可不变变量改成可变变量,使用遮蔽变量依然是不可变
fn main() {
let a = 10;
let a= String::from("hello rust"); //变量的遮蔽允许改变变量的类型
println!("a={}",a)
}
数据类型
标量类型
标量数据类型主要包含整数、浮点数、布尔、字符这四类,标量是存储在栈上面的,因为标量所占的字节长度是固定的
| 长度 | 有符号 | 无符号 |
|---|---|---|
| 8 byte | i8 | u8 |
| 16 byte | i16 | u16 |
| 32 byte | i32 | u32 |
| 64 byte | i64 | u64 |
| 128 byte | i128 | u128 |
整型还有isize 和usize根据操作系统来动态确定的整数类型,如果是32位操作系统就是i32和u32,如果是64位的操作系统就是i64和u64。
浮点型:f32和f64两种。
复合类型
复合类型是可以将多个类型组合成一个类型,rust中复合类型包含两种:元组和数组
元组:是包含多种类型的组合,长度一旦声明就固定不可变了。
fn main() {
let tup_01:(i32,f32,bool) = (100,66.66,true);
println!("{}",tup_01.0);//读取元组第一个类型的值
println!("{}",tup_01.1);//读取元组第一个类型的值
println!("{}",tup_01.2);//读取元组第一个类型的值
}
数组:数组和元组不同,数组的类型必须是一样的且数组的长度声明后也是不可改变的。
fn main() {
// 数组的定义1
let months = ["January", "February", "March", "April", "May", "June", "July",
"August", "September", "October", "November", "December"];
// 数组的定义2
let arr1:[i32;5] = [1,2,3,4,5]; //[i32;5] 表示数组的类型是i32,长度为5
//数组的访问
println!("{:?}", arr1[0]);
// arr1[1] = 222; // 这里编译器会报错,因为数组是不可变的,如果想修改数组的值,需要在数组变量前加入mut才行
let mut arr1:[i32;5] = [1,2,3,4,5]; //[i32;5] 表示数组的类型是i32,长度为5
arr1[1] = 222; // 编译通过
println!("{:?}", arr1[1]);
}