Pointer
From DocForge
A pointer is a variable whose value is the memory location of another variable. Pointers are often used for referencing complex data types such as objects. They're also used for linked lists where each piece of data needs to reference another.
Pointers are typically found in third-generation programming languages and are implemented less often in fourth-generation programming languages which sometimes incorporate their own memory management. With today's CPU speeds it's often considered more beneficial to ease programming than to reduce the number of instructions by a small amount.
[edit] Benefits
Pointers can be used to increase an algorithm's efficiency and performance. Pointer arithmetic lets an application immediately jump to a memory location without having to compare data values.
For example, suppose we have a string, "foobar". To find the fourth character, we can create a loop which starts at the beginning and increments by one until the loop counter hits 4. With a pointer to the string we can instead "jump" to the fourth character by adding 4 to the pointer's value, which is the address in memory containing the string. This is possible because the one string value is contiguous in system memory. Thus, the same functionality can be accomplished with fewer instructions.
Another significant benefit of pointers is lower memory consumption. An object which must be used in multiple parts of an application can have multiple pointers referencing it, rather than each having a copy of the object. For example, a function which takes a pointer as a parameter can alter the value of the referenced object directly. This is more efficient than altering a copy of the object and passing the copy back to the code calling the function.
[edit] Criticisms
Pointer's are often most criticized for causing memory leaks and crashes due to their ability to point to arbitrary memory locations and the need for clearing of memory during and after program execution. Programmers must "manually" manage their application's memory usage. This overhead is the cause of the rise of memory management popularized in fourth-generation programming languages.

