Another use is to allow a function to modify values from the calling function. This can be useful when you need to return more than one value or you need to return a large structure or an array.
Also keep in mind that arrays are just pointers with some statically allocated memory set aside for them ahead of time. Some examples:
char string1[] "Hello ";
char string2[] "World\n";
char * tmp;
tmp = string1;
string1 = string2;
string2 = tmp
printf("%s%s", string1, string2);
would print
World
Hello
string1[2] is equivalent to *(string1 + 2)