I'll fill you in a little further:
Virtual memory, the memory a process uses to read and write to, is divided into blocks the size of a byte. To be able to use all the memory, each block needs an address. A virtual address. Now, when you pass something to a function, usually it's by value - a new variable is created and the original value is copied to the new variable.
But if you want to change the original variable you pass into a function, then you must tell that function the address of the original variable, otherwise it can't find it. And to get the address of a variable, you must use the address of operator (&). If you do not use this, then you are lying to the function and supplying an invalid address, thus causing the whole thing to fall apart.
Note that arrays are an exception to the address rule. Instead of copying the entire array by value, the compiler instead takes the address where the array begins by default, thus creating a pointer without the need for &.
So when a function takes a pointer, pass the address of the variable instead of its value. Or pay attention to warnings or use C++ to compile your code since it will result in a compile error.