C语言中的"%p"格式解释

格式控制符“%p”中的p是pointer(指针)的缩写。指针的值是语言实现(编译程序)相关的,但几乎全部实现中,指针的值都是一个表示地址空间中某个存储器单元的整数。printf函数族中对于%p通常以十六进制整数方式输出指针的值,附加前缀0x。
示例:
int i = 1;
printf("%p",&i);
至关于
int i = 1;
printf("0x%x",&i);
对于32位的指针,输出通常会是相似0xf0001234之类的结果。
%p存在的理由除了附加前缀输出的便利性之外,如LS所说,指针的大小是不肯定的,由实现决定。根据地址空间的大小,通常有16位、32位、64位的指针。尽管目前32位平台上的指针通常全是32位的,但旧的一些平台上可能有多种长度的指针(例如非标准的near、far、huge修饰的pointer)混用,没法用%x、%lx、%hx、%llx(对应int、long、short、long long)中的任意一种保证能输出全部类型的指针。