C语言中的%p

  • Post author:
  • Post category:其他




C语言中的%p




以前在C中,只见过%d,%f…直到今天才遇到%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)中的任意一种保证能输出所有类型的指针。



版权声明:本文为u014326381原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。