Next: Printing Pointers, Previous: Drawbacks of Pointer Arithmetic, Up: Pointers [Contents][Index]
On modern computers, an address is simply a number. It occupies the
same space as some size of integer. In C, you can convert a pointer
to the appropriate integer types and vice versa, without losing
information. The appropriate integer types are uintptr_t
(an
unsigned type) and intptr_t
(a signed type). Both are defined
in stdint.h.
For instance,
#include <stdint.h> #include <stdio.h> void print_pointer (void *ptr) { uintptr_t converted = (uintptr_t) ptr; printf ("Pointer value is 0x%x\n", (unsigned int) converted); }
The specification ‘%x’ in the template (the first argument) for
printf
means to represent this argument using hexadecimal
notation. It’s cleaner to use uintptr_t
, since hexadecimal
printing treats the number as unsigned, but it won’t actually matter:
all printf
gets to see is the series of bits in the number.
Warning: Converting pointers to integers is risky—don’t do it unless it is really necessary.