Edit:
Given responses to my reply below I've updated my post.
Writing bad code ad-hoc is what I get for being in a hurry. Hehe. 
--
There's also significant performance benefits. You can pass a pointer to the first element of an array, instead of passing an entire array.
Code:
// fail.
void function (int data[100])
{ data[99]; }
// win!
void function (int *data, int size)
{ data[size-1]; }
Better yet in C++ vectors are handy.
Code:
// win!
void function (vector<int> *data)
{ data->at(data->size() - 1); }
You can get even fancier with more complex projects where you're managing an array of large objects, instead of storing objects within the array store pointers to the objects instead. That way if any copies of the array occur it's only copies of the pointers and not a set of giant objects.
Code:
// win!
void function (vector<object *> *objects)
{ objects->at(objects->size() - 1)->method(); }
// not as win, but not as fail either!
void function (vector<object *> objects)
{ objects.at(objects.size() - 1)->method(); }
// works, but not great if performance matters.
void function (vector<object> objects)
{ objects.at(objects.size() - 1).method(); }
So pointers/references can make working with arrays more flexible, practical, efficient, etc.