In C, when is it preferrable to use one over the other?
Pointers are useful when the size of the data structure is not known at compile time. e.g. when you do not know what is the length of a string, or how many integers you are expecting and so on. In such situations, pointers can be dynamically allocated memory depending on the requirements.
Arrays on the other hand, reduce the flexibility.
There is much more beyond this difference though.