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]$ (written 2007-04-19)
Associated topics are indexed under
C207 - C and C based languages - Pointers and references [3399] From fish, loaves and apples to money, plastic cards and BACS (Perl references explained) - (2011-08-20)
[3386] Adding the pieces together to make a complete language - C - (2011-08-11)
[3242] How to return 2 values from a function (C++ and C) - more uses of pointers - (2011-04-10)
[3238] Bradshaw, Ben and Bill. And some C and C++ pointers and references too. - (2011-04-09)
[3121] New year, new C Course - (2011-01-05)
[3004] Increment operators for counting - Perl, PHP, C and others - (2010-10-18)
[2670] Pointers to Pointers to Pointers - what is the point? - (2010-03-10)
[2572] The what and why of C pointers - (2010-01-13)
[2005] Variables and pointers and references - C and C++ - (2009-01-23)
[1497] Training Season Starts again! - (2008-01-07)
[1478] Some new C programming examples - files, structs, unions etc - (2007-12-19)
Some other Articles
It can take more that one plus one to get two.Private Java Course - A customer's picturesSpeed Networking - a great evening and how we arranged itTwo by One by WiltshirePointers in CAs I came back from TescoObject Oriented Model - a summary of changes from PHP4 to PHP5Course, right place, right timeGordon Dodge, R.I.P.Helsinki - what comes naturally