Easy C++


C++ Tutorial - Lesson 8: An Introduction To Pointers

by John Kopp

Support this site at no cost to you

Pointers are variables that hold addresses in C and C++. They provide much power and utility for the programmer to access and manipulate data in ways not seen in some other languages. They are also useful for passing parameters into functions in a manner that allows a function to modify and return values to the calling routine. When used incorrectly, they also are a frequent source of both program bugs and programmer frustration.

As a program is executing all variables are stored in memory, each at its own unique address or location. Typically, a variable and its associated memory address contain data values. For instance, when you declare:

int count = 5;

The value "5" is stored in memory and can be accessed by using the variable "count". A pointer is a special type of variable that contains a memory address rather than a data value. Just as data is modified when a normal variable is used, the value of the address stored in a pointer is modified as a pointer variable is manipulated.

Usually, the address stored in the pointer is the address of some other variable.

int *ptr;
ptr = &count    // Stores the address of count in ptr
    // The unary operator & returns the address of a variable

To get the value that is stored at the memory location in the pointer it is necessary to dereference the pointer. Dereferencing is done with the unary operator "*".

int total;
total = *ptr;
    // The value in the address stored in ptr is assigned to total

The best way to learn how to use pointers is by example. There are examples of the types of operations already discussed below. Pointers are a difficult topic. Don't worry if everything isn't clear yet.

Declaration and Initialization
Declaring and initializing pointers is fairly easy.

int main()
    int j;
    int k;
    int l;
    int *pt1;    // Declares an integer pointer
    int *pt2;    // Declares an integer pointer/
    float values[100];
    float results[100];
    float *pt3;    // Declares a float pointer
    float *pt4;    // Declares a float pointer

    j = 1;
    k = 2;
    pt1 = &j;    // pt1 contains the address of the variable j
    pt2 = &k;    // pt2 contains the address of variable k
    pt3 = values;
        // pt3 contains the address of the first element of values
     pt3 = &values[0];
        // This is the equivalent of the above statement

    return 0;
Previous Page       Next Page