After all, both these statements do the same thing...
int a = 10;
int *b = &a;
printf("%p\n",b);
printf("%08X\n",b);
For example (with different addresses):
0012FEE0
0012FEE0
It is trivial to format the pointer as desired with %x
, so is there some good use of the %p
option?
x
is Unsigned hexadecimal integer ( 32 Bit )
p
is Pointer address
See printf on the C++ Reference. Even if both of them would write the same, I would use %p
to print a pointer.
You cannot depend on %p
displaying a 0x
prefix. On Visual C++, it does not. Use %#p
to be portable.
x
is used to print t pointer argument in hexadecimal.
A typical address when printed using %x
would look like bfffc6e4
and the sane address printed using %p
would be 0xbfffc6e4
At least on one system that is not very uncommon, they do not print the same:
~/src> uname -m
i686
~/src> gcc -v
Using built-in specs.
Target: i686-pc-linux-gnu
[some output snipped]
gcc version 4.1.2 (Gentoo 4.1.2)
~/src> gcc -o printfptr printfptr.c
~/src> ./printfptr
0xbf8ce99c
bf8ce99c
Notice how the pointer version adds a 0x
prefix, for instance. Always use %p since it knows about the size of pointers, and how to best represent them as text.
When you need to debug, use printf with %p
option is really helpful. You see 0x0 when you have a NULL value.
The size of the pointer may be something different than that of int
. Also an implementation could produce better than simple hex value representation of the address when you use %p
.
Source: Stackoverflow.com