------------------------------------------------------------------------------
MC logo
Basic Pointers
[^] Code Examples
------------------------------------------------------------------------------
<<Array Echo basicp1.c Swap Using Pointers>>
/* Some pointer games. */
#include <stdio.h>

int fred(int *z)
{
        int q = *z;
        *z = 15;
        return 2*q;
}

int main()
{
        int m = 5, n = 10;
        int *ip, *ip2;

        ip = &m;
        ip2 = &n;
        *ip = 77;
        *ip2 = -485;
        printf("A: %d %d\n", m, n);

        *ip2 = *ip;
        printf("B: %d %d\n", m, n);

        ip2 = ip;
        *ip = 100;
        *ip2 = 200;
        printf("C: %d %d\n", m, n);
        
        m = fred(&n);
        printf("D: %d %d\n", m, n);
}

Pointers in C are analogous to references in Java, but much more powerful (and hence more confusing an error-prone). The * is the dereference operator, which goes from a pointer to the thing it points to. The & is the address-of operator which creates a pointer to other data.

The * is used in declarations to declare pointers. It is the dereference operator only in expression. This can be rather confusing. The & is not used in declarations in C (though C++ uses it to make things more confusing).

If you are in lecture, make sure your lazy instructor gets off his duff and makes a picture of this. It's the only way to make sense out of it. If you're not in lecture, you might want to consider drawing your own picture toward the same purpose.

Reading: pp. 48-49
<<Array Echo Swap Using Pointers>>