The effects of allocating and deallocating memory. Once you allocate memory for some purpose, it stays allocated until you deallocate it. While it's allocated, it is not available for other purposes. The reason to deallocate it is to make that memory available for other uses.
Why this matters. This becomes important if your program continues to allocate new chunks of memory over time. If you don't deallocate memory when you no longer need it, your program's use of memory grows and grows and grows, and may eventually exhaust the pool of memory that the operating system makes available to it.
No real harm in this example. In the particular example you, there's (likely) no harm in skipping the deallocation. For one thing, the program ends immediately thereafter, so the program has no further uses for that memory. For another thing, as others have mentioned, in typical implementations of C, your program gives back all of its memory when it exits.
But if your program might need the memory for something else, or if your program won't give the memory back to the operating system when it exits, it's a good idea to deallocate memory when you no longer need it.
The memory, not the pointer, is deallocated. Strictly speaking, that example does not deallocate the pointer. It deallocates the memory that the pointer points to. The pointer is still there, and in fact is still pointing to the now-deallocated memory. This can lead to endless debugging joy if you inadvertently continue to use the pointer as if it still pointed to memory it owns.