The other way around: f is a reference to a pointer. Did you run your example? What you certainly saw is that i is incremented by 4 in the call to incr. That's probably the point to be demonstrated here. f is a reference to a pointer to int, so it behaves like a pointer to int. When you increment it, its value will increase by the number of bytes that equals the size of an int on your computer - usually 4 on 32-bit systems.
Only by passing f by reference made it possible that the change to f is visible in main at all. If you pass it by value like in
void incr(int* f)
f would be incremented, but main would not see the change, as it never would get back there.