Pointers in C
Archive - Originally posted on "The Horse's Mouth" - 2007-04-19 07:09:36 - Graham EllisI 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]$