First, thank you very much to everyone that shared their feedback and knowledge about the subject. I definitely feel that everyone's comments have set me in the right direction to fully understand pointers. (As with most things, I imagine using them in a program will be the easiest way to fully grasp their usefulness.) Below are a few poster-specific questions/comments:
A pointer says "A thing is over there", rather than making copies of things everywhere.
Almost everywhere in programming you want to only have a single copy of something, then have pointers over to the original thing. You do not want to have hundreds or thousands of copies of that thing, nor do you want to create copies for no good reason.
When you want one goblin to deal damage to a zombie, you don't want to have a function that says "This is the goblin that hit you", but in the process create an entire duplicate copy of the goblin to send in the data. Instead you pass a pointer to the actual goblin that hit. It says "look on the other end of the pointer, that is the thing that hit you."
To clarify on your comments.. If I were to build two functions, one that provides the last creature the goblin damaged and another to read the goblin's current HP amount. I would use Pointers to read the data for that particular Goblin. The alternative would be building a new goblin into each function in an attempt to read that data... Which as I type that, doesn't even seem like it would work.
(Also, I would need separate pointers if there were more than 1 goblin that needed variables referenced? Correct?)
Let me answer your question by asking you a question. Say you have a text file where you wrote down goblins with their hp and names, now your read the file and you get the goblin names and hp values. Your program doesn't know anything about the number of goblins, it'll only find out after reading the file, how would you make an array of all these goblins?
Hmm. Well, I suppose I would do something like the following: (Forgive me for any newbish formatting):
// Build a Class initially...
goblin totalgoblins[MAX_GOBS];
int numGobs = 0;
totalgoblins[numGobs++] = "goblin";
Hmm, well while I attempt what you asked, I am realizing that building an Array to represent items like HP values and Names isn't working very well... So, is it safe to say that the following is possible:
Goblin 1's Address (which is Pointed to...): 123
I could pull specific information from that address such as HP values and names? I ask because I was under the impression only a specific type of integer could be stored at the address, i.e. and INT or STRING value, for example.
Say you went to a party, you are with a heavy coat, you pass by the cloakroom and leave your cloak, the guy working there gives you a paper that says "Wardrobe 16". You enjoy the party and before you leave you go back to the cloakroom and deliver the paper, the guy gives your coat back.
In this example the wardrobe is the memory block, the coat is the memory content and the paper is the pointer.
There are several utilities for pointers, but in the general case they are useful to access memory from scopes other than the one it was created. The use and the scope is determined by where the memory is being stored (text segment, stack or heap), but I guess this would be a deeper discussion.
This is an amazing analogy! Thank you! Similar to a question I asked above. Would the 'coat' hold multiple variables? (i.e. Name of the coat, color, size, etc.?)
Thanks again everyone!