 <blockquote> <p>What is the point of the &amp;?</p> </blockquote> <p>The <code>&amp;</code> takes the reference of an object, as you surmised. However, there's a <a href="https://github.com/rust-lang/rust/blob/b7fb57529aded92c4f470568e6b5ea7a5a28f6a4/src/libcore/fmt/mod.rs#L783-L796" rel="nofollow"><code>Debug</code> implementation for references to <code>Debug</code> types</a> that just prints out the referred-to object. This is done because Rust tends to prefer value equality over reference equality:</p> <pre class="lang-rust prettyprint-override"><code>impl&lt;'a, T: ?Sized + $tr&gt; $tr for &amp;'a T { fn fmt(&amp;self, f: &amp;mut Formatter) -&gt; Result { $tr::fmt(&amp;**self, f) } } </code></pre> <p>If you'd like to print the memory address, you can use <code>{:p}</code>:</p> <pre><code>let v = vec![1,2,3]; println!("{:p}", &amp;v); </code></pre> <blockquote> <p>it looks like they are looping through a reference</p> </blockquote> <p>The <code>for i in foo</code> syntax sugar calls <code>into_iterator</code> on <code>foo</code>, and there's an <a href="https://github.com/rust-lang/rust/blob/b7fb57529aded92c4f470568e6b5ea7a5a28f6a4/src/libcollections/vec.rs#L1520-L1528" rel="nofollow">implementation of <code>IntoIterator</code> for <code>&amp;Vec</code></a> that returns an iterator of references to items in the iterator:</p> <pre class="lang-rust prettyprint-override"><code>fn into_iter(self) -&gt; slice::Iter&lt;'a, T&gt; { self.iter() } </code></pre>