There are a few big benifits of pointers and references.
For example if you have a function that calculates the result of a x^2 equation you would want it to return both the roots.
This can be achived by passing a reference or pointer to variables that will contain the roots after the calculations.
Int calculate(float p, float a, float q, float& x1, float& x2);
Other uses includes:
Creating a pointer and later telling what to point at using the new keyword, called dynamic memory.
Having one pointer which can point at two diffrent variables which changes during runtime.
Avoiding passing big data structures as arguments( copying isn't good).
Creating linked lists.
In 3d graphic pointers are often used when swapping between the back and front buffer.