Before I read the book, the reference to the heap is like:
let v: Vec<f64> = vec![0.0, 0.707, 1.0, 0.707];
let a: [f64; 4] = [0.0, -0.707, -1.0, -0.707];
let sv: &[f64] = &v;
let sa: &[f64] = &a;
(from Programming Rust)
sv is a reference to heap so it points to the same address in heap as v.
But I read a article from https://www.net.in.tum.de/fileadmin/bibtex/publications/theses/2018-ixy-rust.pdf .
fn main(){
let s = String ::from("hello");
let r = &s;
let t = s;
println!("{}", r);
}
(the code can't be run cause it use reference after move)

emmmm, r just point to the address in stack.Yeah, it is a truly reference but reference in rust is pointer (right?).
This image is the same as the above if the value is stack allocated.And it's more nature explaining why can't use borrow later after move.
So, which is corrent?
