"首次提交"

This commit is contained in:
2024-06-08 15:01:12 +08:00
parent 6e0f708d0a
commit 84349a2469
112 changed files with 3272 additions and 0 deletions

117
variable/src/main.rs Executable file
View File

@ -0,0 +1,117 @@
//学习不可变变量可变变量const变量类型标注
//const变量在函数外函数内都可以定义必须加上类型标注
const MAX_POINT:i32 = 90;
//rust 是静态强类型,编译时语言
fn main() {
const MAX_POINT:u32 = 999;
//申明一个不可变变量
let immute_var:&str = " ";
//如下使用将会报错,因为给不可变变量二次赋值
//immute_var = "qwer";
//重新使用let关键字可以使得用一个同名的一个不可变变量之前的变量就被shadow掉了
let immute_var = "aasd";
//同理可以修改变量的类型,因为这其实是一个新变量
let immute_var:u32 = 90;
//定义一个可变变量
let mut mute_var = 78;
//给可变变量重新绑定一个新的值
mute_var = 45;
//不可以修改变量类型, 静态强类型!
//mute_var="asdasd"
data_type();
compound();
array()
}
fn data_type(){
//变量类型:
//变量类型分为标量类型和复合类型:
/*
标量:
i8 i16 i32 i64 i128
u8 u16 u32 u64 u128
f32 f64
默认的数据类型分别是 i32和f64
占用的字节数量和数据类型的bit位有关系
*/
//类型标注
let num:u16= 666;
//数据后后置类型
let num= 0x1234u16;
//支持多种赋值方式
let num= 0x1234;//16进制
let num= 1234; //10进制
let num= 1_234_234;//下划线分割,增强可阅读性
let num= 0b1111_0000;//二进制
let num=0o123_675;//8进制
//使用ASCII的值进行复制仅限u8类型
let num = b'A';//
let num:u8 = b'|';//
//let num:u16 = b'A';//报错类型不匹配
//数据溢出,进行环绕,
//let num:u8 = 255 + 1; // => num = 0
//println!("255+1 = {}", num);
//强类型不可以从i32->f32直接赋值
//let num1:f32 = num;
//定义一个字符变量Unicode变量四个bytes。和字符串不同他是单引号的
let c:char='A';
let c:char='我';
let c:char='😍';
//定义布尔类型,占一个字节
let ok=true;
let ok=false;
//和架构有关的类型 isize usize, 在多少位的系统上就是多少位的
let num:isize=78;
let num:usize=34;
}
//复合数据类型
fn compound(){
//定义一个元组每个元组元素各不相同
let tup = ("123", '👀', 34, 45.6f32, b'A', 0x45u16, 0o34);
//定义一个元组指定数据类型
let tup:(i32,u8,u16) = (1,1,1);
//解构元组
let (x,y,z) = tup;
println!("{} {} {}", x, y, z);
//下标获取元组元素
let x = tup.0;
let y = tup.1;
let z = tup.2;
//越界访问,编译时即会报错!
//let z = tup.3;
println!("{} {} {}", x, y, z);
}
fn array(){
//定义一个数组,数组元素数据类型必须完全一致
let ary = [1,2,3,4];
//不仅是数字,可以是任意数据类型
let ary = ['💕', '😢', 'A'];
//指定数据类型和长度,并初始化
let mut ary:[char;3] = ['🙌';3];
println!("before {} {} {}", ary[0], ary[1], ary[2]);
//使用索引修改数组元素
ary[0] = '💕';
println!("after {} {} {}", ary[0], ary[1], ary[2]);
//越界访问编译报错, 这个检查不一定的可靠的,有可能在逻辑复杂时无法检测到
//println!("test {} {} {} {}", ary[0], ary[1], ary[2], ary[3]);
}