1.陣列建立
一段連續空間中,儲存了同型別的資料。
fn main() ", arr1[0]);
println!("arr2[0]: {}", arr2[0]); //複習一下:因為拷貝時是複製語義,因此arr2還在
}
執行結果:
arr1[0]: 1
arr2[0]: 1
為啥這個陣列是複製語義,如果還不明白這個問題,需要回上一期看一下哈。
2.一些陣列的操作
fn main() ", arr1 < arr2);
}
執行結果:
true
上面是陣列的比較。
fn main() ", i);}}
執行結果:
012345
陣列的遍歷。
3.多維陣列
fn main() ", i);}}
執行結果:
[0, 0]
[0, 1]
[1, 0]
[1, 1]
這裡只講乙個程式:
fn main() ", str1);
let mut str2 = "rust"; //&str型別,因此並沒有所有權
push_str2(&mut str2);
println!("{}", str2);
}fn push_str1(str : &mut string)
fn push_str2(str : &mut str)
編譯出錯:
error[e0599]: no method named `push_str` found for type `&mut str` in the current scope
--> srcmain.rs:15:9
|15 | str.push_str("nb!");
| ^^^^^^^^ method not found in `&mut str`
就是說&mut str型別沒有push_str方法。
string是字串型別,可變長度。
&str型別只是借用,就算是&mut str,也只是對一塊字串的借用。沒有管理空間的權利。
fn main() ", str1);
let mut str2 = "rust"; //&str型別,因此並沒有所有權
// push_str2(&mut str2);
println!("{}", str2);
}fn push_str1(str : &mut string)
//fn push_str2(str : &mut str)
還有一點,rust的字串並不是char陣列。char是unicode編碼,string是utf-8編碼。
和c++不太一樣,有點像json?
1.結構體定義及初始化
struct point
逗號隔開。
struct point
fn main() ;
println!("{}, {}", p1.x, p1.y);
}
執行結果:
2,2
rust還支援以下操作:
struct point
fn default() -> point
}fn main() ;
let p2 = point;
let p3 = point;
let p4 = point;
println!("p1 at: ({}, {})", p1.x, p1.y);
println!("p2 at: ({}, {})", p2.x, p2.y);
println!("p3 at: ({}, {})", p3.x, p3.y);
println!("p4 at: ({}, {})", p4.x, p4.y);
}
執行結果:
p1 at: (2, 2)
p2 at: (0, 0)
p3 at: (1, 0)
p4 at: (0, 2)
非常滴方便!
結構體方法
struct circle
impl circle
fn show()
fn area(&self) -> f32
}fn main() ;
println!("the radius: {}", circle.get_radius());
println!("the area: {}", circle.area());
circle::show(); //類似於靜態方法吧。這裡只能用類名進行呼叫
}
執行結果:
the radius: 2
the area: 12.56
i am a circle!
1.列舉的定義和使用列舉,其中資料之間的關係是「或」的關係。
兩種定義方式:
#[derive(debug)]
enum os_type
struct phone
enum phone2
enum num //可以是不同的資料型別
fn main() ; //類似於c語言的定義方式
let p3 = phone2::android_phone(string::from("huawei")); //rust推薦的定義方式
}
那麼我們怎麼使用enum,如何定義列舉方法呢,下面乙個例子做簡單說明
//列舉方法及match
impl num ", val),
num::float(val) => println!("float: {}", val)}}
}fn main()
執行結果:
int: 20
float: 3.14
可變長陣列:
常見操作示例如下:
fn main() ", v1[2]);
//但是不推薦上述方式
//推薦以下方式
match v1.get(2) ", value),
none => println!("index error")
}//不可變遍歷
for i in &v2 ", i);
}println!();
//可變遍歷
for i in &mut v2 ", i);}}
執行結果:
v1[2]: 3
v1[2]: 3
1 2 3 4
3 4 5 6
復合資料型別
復合資料型別 作用 封裝資料 多種不同型別資料存放在一起 應存放在全域性,在訪問結構體中的變數時,應用stu.id stu.name 初始化的方式 在對陣列進行初始化時 strcpy stu.name,zhangsan 在對指標進行初始化時 char name 對name進行初始化 stu.name...
復合資料型別
一 struct結構體 封裝資料 存放多種不同的資料型別 struct的宣告放在全域性區 1.宣告和定義 宣告 struct student struct student stu array 3 int i for i 0 i 3 i for i 0 i 3 i include struct stu...
復合資料型別
結構體 作用 封裝資料 把多種不同的資料型別放在一起 注意 一般放在全域性 分號不能省略。結構體變數用點訪問 結構體指標用 訪問 初始化 靜態初始化 動態初始化 使用注意事項 給結構體中的陣列成員賦值時,不能直接將字串賦給陣列名,可以使用strcpy函式 給結構體中的指標變數成員賦值時,要先給指標分...