IMO "WHEN" to use pointers depends on how you are designing your program. You usually run into pointers when you need interchangability and flexibility. For example, you have a list of functions that all have the same prototype and you want to be able to assign any of those functions to be executed when you press the Z Key on your keyboard. You would use a function pointer. Now what happens when you press the Z Key depends entirely on which of the functions you have assigned to the pointer. Another example would be when you do not want to create a duplicate copy of the data. Lets say you have several integer arrays that have 10 values each and you need to modify them all by adding 1 to each of their values. You can store a list of all the integer arrays by creating an array of 10 pointers to them. Now you can loop through them to process all 10 arrays.
Thanks a bunch. I still don't 100% understand but I read in one of those links that they are only really important for more "dynamic programs". So long as I know how to use them (not when), that should be sufficient for now.