I am more a C++ programmer than a C programmer, but I would say that pointers would commonly be used when you need a dynamic array (malloc() returns a pointer) and when you need to pass by reference. Since C only has pass by value, you would need to pass a pointer by value to simulate pass by reference.
Note also that arrays decay to a pointer to their first element when passed as an argument. Consequently, things like sizeof() would be working on the pointer, not the array, under some circumstances, even though you are dealing with an array.