复合数据类型可以在其他类型的基础上形成更复杂的组合关系
常见的有tuple、struct、enum等
tuple指的是元组类型
它通过圆括号包含一组表达式构成
tuple内的元素没有名字
tuple是把几个类型组合到一起的最简单的方式
fn main(){
println!("{}"," Hello Tuple");
// 元组中包含两个元素,第1个是i32类型,第2个是bool类型
let a =(1i32, false);
// 元组中包含两个元素,第2个元素本身也是元组,它又包含了两个元素
let b = ("a", (1i32, 2i32));
// 如果元组中只包含了一个元素,应该在后面添加一个逗号,以区分括号表达式和元组
// c是一个元组,它有一个元素
let c =(0,);
// d是一个括号表达式,它是i32类型
let d = (0);
// 访问元组内部元素有两种方法,一种是模式匹配,另外一种是数字索引
let p = (10i32, 20i32);
let (m, n) = p;
let x =p.0;
let y = p.1;
println!("{} {} {} {}", m, n, x, y);
// 在元组内部也可以一个元素都没有,这个类型单独有一个名字,叫unit单元类型
// 可以说,unit类型是rust中最简单的类型之一,也是占用空间最小的类型之一。
// 空元组和空结构体struct Foo;一样,都是占用0内存空间
let empty : () = ();
println!("size of i8 {}", std::mem::size_of::<i8>());
println!("size of char {}", std::mem::size_of::<char>());
println!("size of '()' {}", std::mem::size_of::<()>());
// std::mem::size_of函数可以计算一个类型所占用的内存空间,可以看到,i8类型占用1 byte,char类型占用4bytes,空元组占用0byte
}
enjoy