The type that the iterator returns is (usize, &u8), so the pattern means i is usize and item is a u8. Note how the & line up, so the binding of item "sees through" the reference, if you will.
This is how pattern bindings work generally, not something for loop specific.
I like this metaphor. but it seems that ref/ref mut is an exception , which does not match anything. it behaves more like an action : turn whatever type of the target into a borrow/mutable borrow.