I often have a mistake on declaring a variable by copy.
I am used to c# and even though I understand the copy by value and copy by reference thing, I still cant find a practical way on when do you use the reference when declaring a variable.
A reference is really just an alias; it's another name for a variable in your program. A reference must be initialized when it's defined and it cannot be changed to refer to a different variable during the lifespan of a program.
To answer your question, you use references when you are passing large objects to a function as it results in efficiency.