|

DepartmentsMain About Errata FAQ Compiler Tips Supplemental Lessons NCurses Source Code Files On-line Book Ordering |
|
Pointer Cheat Sheet
This page is based on information that appeared on the tear-out Cheat Sheet from C For Dummies, Volume II.
Pointer Pointers
- A pointer must always be of the same type as the variable it's pointing at.
- Declaring a pointer variable does not create the type of variable it points at. It creates a pointer variable.
- Though pointers are declared with an asterisk they are not always used with an asterisk.
- Pointers must be initialized before they can be used.
- Initialize a pointer by assigning it to a variable (of the same type).
- To assign a pointer to a variable, use an ampersand with the variable's name.
m_address = &memory;
- To assign a pointer to an array, do not use the ampersand:
s_address = string;
- To assign a pointer to an array element, use the ampersand:
element = &string[2];
- Without an asterisk, an initialized pointer holds a memory address.
- With an asterisk, an initialized pointer holds a value (the value of the variable the pointer points at).
Typical Pointer Setup and Use
First, create a pointer of the proper type:
float *f;
Second assign it to a variable's memory location:
f = &boat;
Finally, use the pointer:
printf("%.0f",*f);
- Without its asterisk, the pointer is a memory location.
- With its asterisk, the pointer equals the value at the memory location.
- Always use the same type of pointer as the variables it examines: floats for floats, ints for ints, and so on.
- Remember: Always initialize a pointer before you use it! Set the pointer equal to the address of some variable in memory.
Pointers, Parenthesis and Math
| Pointer Thing |
Memory Address |
Memory Contents |
p |
Yup |
Nope |
*p |
Nope |
Yup |
*p++ |
Incremented after value is read |
Unchanged |
*(p++) |
Incremented after value is read |
Unchanged |
(*p)++ |
Unchanged |
Incremented after it's used |
*++p |
Incremented before value is read |
Unchanged |
*(++p) |
Incremented before value is read |
Unchanged |
++*p |
Unchanged |
Incremented before it's used |
++(*p) |
Unchanged |
Incremented before it's used |
p*++ |
Not a pointer |
Not a pointer |
p++* |
Not a pointer |
Not a pointer |
The ++ operator is used above, though any math operation can be substituted.
As a tip: Use parenthesis to isolate part of the pointer problem and the answer will always work out the way you intended.
Pointers and array brackets
| Array Notation |
Pointer Equivalent |
array[0] |
*a |
array[1] |
*(a+1) |
array[2] |
*(a+2) |
array[3] |
*(a+3) |
array[x] |
*(a+x) |
Ugly ** notation
| Doodad |
What It Is |
How The Compiler Sees It |
array+1 |
An address |
A pointer |
*(array+1) |
Contents of address, what lives there |
A string |
*(*(array+1)) |
Contents of a character array |
A character |
**(array+1) |
Same as above |
Same as above |

Copyright © 1997-2012 by QPBC. All rights reserved |