A pointer holds an address to different location in memory. A good analogy is a mailing address.
If you hire painters to paint your house, you don’t want then to paint their own building…so they need the address of your house.
Values in memory are stored in boxes, and each box has an address. A pointer holds the address to a different box. This allows you to modify an object that is at a different location from where the code is actually running.
More detailed: each function has a stack, which is a section of memory allocated for all the data needed for that function to run. Once a function is done running, that memory is “deleted”. To be able to continue using data beyond the end of the function, it must be allocated on the heap. To access the data that is located on the heap, we need the address of it…and that is what pointers are used for.