in other words, nothing is actually "passed" to a function only a copy pushed on the stack, and then free'd up when the function returns. Passing by reference, is passing a pointer and the dereferenced value can be changed, since it's not on the stack (At least not in the part that will be free'd)