I'm a first year CSC student and I've been trying to figure this out for a while now also, today I came across an example of how it would actually help (I'll apologize now if I don't format this code correctly, first time posting).
One of our assignment involves sorting arrays of character strings, these are the key parts of my first draft.
int main()
{
char pals[80][80];
char subString[80];
//Now assume that pals already has 35 sorted rows all filled with 80 characters a piece, I want to find the index of the row where I should stick subString in, so I start at the back and compare the subString to the rows of pals. As I go back I copy the character string in pals[n] to pals[n+1] to free a space for the array that's being inserted.
while (pals[i] > subString) // Need to use a string function, but this is the idea
{
strcpy(pals[i+1], pals[i]);
i--;
}
So in that instance every time you move a character array up 1 index spot, you have to copy 80 individual characters. With enough input, this can be pretty time consuming.
Now the better way...
char * pals = new char[80][80];
Then...
while (pals[i] > subString)
{
pals[i+1] = pals[i];
i--;
}
Now this way if you call pals[i], you will get the same array that you would if you weren't using pointers, but the useful part is when you are moving pals[x] up to the next index, instead of having to copy 80 characters, you just copy the address of the first character in the string. This gives you the same end result but is a lot more efficient.
I'm sorry if it came across as confusing, but seeing as how I just found a use for them myself, I'm pretty sure I can't be way over you guys's heads like some of the really smart ones around here :) The syntax of the examples above is terrible, but I was just trying to give a really straightforward example of how those crazy pointers can help.