Main Content

Pointers in C

Archive - Originally posted on "The Horse's Mouth" - 2007-04-19 07:09:36 - Graham Ellis

I know when I'm giving a C Programming course that I'll come to the section on pointers and I'll have to slow right down - those extra * and & characters take a little explaining and getting used to.

Here are the key points.

A variable declared with a * in front of it holds a reference to (i.e. the address of) another variable. The type of the OTHER variable is stated inthe declaration. Thus: float *boat; declares a variable called boat that holds an ADDRESS, and at that address you'll find a float variable.

A reference to a variable preceeded with an & calls up the ADDRESS of a variable rather than its contents - so it's suitable for assigning to a variable of the type described in the previous paragraph.

And a reference to a variable preceeded with an * calls up the CONTENTS of the address pointed to by the variable - in effect it's the opposite of &.

Example:

int main(int argc, char ** argv) {
 
  int bill = 25; /* hold int */
  int ben = 43;
 
  int *fpotmen; /* holds POINTER TO an int */
 
  fpotmen = &bill; /* ADDRESS OF bill */
 
  *fpotmen = 65 - *fpotmen;
  printf("Retires in %d years\n",*fpotmen); /* CONTENTS OF fpotmen */
 
  fpotmen = &ben; /* ADDRESS OF ben */
 
  *fpotmen = 65 - *fpotmen;
  printf("Retires in %d years\n",*fpotmen); /* CONTENTS OF fpotmen */
 
}


WHY?

Because you can assign lots of different variable addresses in turn to a single pointer variable, teh use common code to process a whole lot (array) of data. You'll note that I've illustrated this in the example above by exactly duplicating two of the lines of code, though in a real life application I would prefer not to duplicate but rather to write them into a separate function.

Let's run that code and see when Bill and Ben retire ...

[trainee@daffodil cxx]$ gcc -o panda panda.c
[trainee@daffodil cxx]$ ./panda
Retires in 40 years
Retires in 22 years
[trainee@daffodil cxx]$