Quote: "I don't see any reason to use pointers... What's the point of them?"
Assuming you don't mean what's the point of them as opposed to references, here's an example(won't compile on its own):
struct Example
{
float kool[1024];
}whatever;
something( whatever );
something( &whatever );
void something( example myExample )
{
}
void something( example* myExample )
{
}
As you can see I've made a struct that stores 1024 float values, this could be heightmap data or anything you like. If I were to pass this to the first function, 1024 floats would be allocated on the stack and then all the floats from the 'whatever' instance of my 'Example' struct would be copied over to 'myExample' in the first function. This is inefficient as copying over 1024 floats cannot be done instantly and it's pointless because I don't need to modify them separately. Whereas in the second function I pass the address to 'whatever', this means that likely only 4bytes is passed depending on OS etc, and no floats are copied anywhere, I can then access the 1024 floats that are stored within my 'Example' struct via 'myExample->kool[42] = 1337.0f;'. This is only a basic example but on a larger scale it can be very beneficial.