What's the Point

Before looking deeper into what pointers are all about, an example would be helpful. Consider the problem of writing a function that swaps two integers. Say for example, we want to sort an array of integers (put them in order). Part of sorting involves swapping elements in the array. Now a function can return a single integer, but not the two changed ones. Also if we try to write swap like:
void swap(int x, int y)
   int temp;
   temp = x;
   x = y;
   y = temp;

we'd have a problem. We would indeed swap the values of x and y , but they are only local copies of the numbers. If we call swap() with a command like:
swap(a[i], a[j]);

then the values of a[i] and a[j] won't be changed.

However, we can write swap() using pointers. Consider the function:

void swap(int *x, int *y)
   int temp;
   temp = *x;
   *x = *y;
   *y = temp;

Here we're not swapping the values of x and y . They are pointers to the actual numbers we want to swap, so we swap the integers that they point to. That also means that we call it differently; we would call swap() with a statement like:
swap(&a[i], &a[j]);

This figure shows the situation before calling swap() ,

[Pointers before calling swap()]

and this figure shows the situation at the end of swap() .

[Pointers after calling swap()]

Proceed to the next part .