www.easyCPlusPlus.com

Easy C++

www.easyCPlusPlus.com

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.

Introduction
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