"首次提交"
This commit is contained in:
117
variable/src/main.rs
Executable file
117
variable/src/main.rs
Executable 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]);
|
||||
}
|
Reference in New Issue
Block a user