fn main() {
let arr = [1, 2, 3];
let s1: &[i32] = &arr[0..2];
let s2: &str = "hello, world";
}
fn main() {
let arr: [char; 3] = ['中', '国', '人'];
let slice = &arr[..2];
// TIPS: slice( reference ) IS NOT an array, because if it is, then `assert!` will passed: each of the two UTF-8 chars '中' and '国' occupies 4 bytes, 2 * 4 = 8
assert!(std::mem::size_of_val(&slice) == 16);
}
fn main() {
let arr: [i32; 5] = [1, 2, 3, 4, 5];
let slice: &[i32] = &arr[1..4];
assert_eq!(slice, &[2, 3, 4]);
}
fn main() {
let s = String::from("hello");
let slice1 = &s[0..2];
let slice2 = &s[..2];
assert_eq!(slice1, slice2);
}
fn main() {
let s = "你好,世界";
let slice = &s[0..3];
assert!(slice == "你");
}
fn main() {
let mut s = String::from("hello world");
// here, &s is `&String` type, but `first_letter` needs a `&str` type.
// it works because `&String` can be implicitly converted to `&str, If you want know more ,this is called `Deref`
let letter = first_letter(&s);
println!("the first letter is: {}", letter);
s.clear();
}
fn first_letter(s: &str) -> &str {
&s[..1]
}