为什么格式字符串中%p和%x的格式不同?

Mar*_*n G 3 c printf format-string

打印十六进制值(%x)和地址(%p)时,格式略有不同.0x在十六进制值的情况下,打印值不会以:

int main()
{
     int x = 0x1234;
     printf("Value of x: %x\n", x);
     printf("Address of x: %p\n", (void*)&x);
}
Run Code Online (Sandbox Code Playgroud)

收益率(gcc):

Value of x: 1234
Address of x: 0xffb0fbfc
Run Code Online (Sandbox Code Playgroud)

为什么0x在地址的情况下强迫你呢?

我想它归结为标准.

0x如果没有我想要的话,打印地址的正确方法是什么?这%p不仅是%x一个附加的0x权利吗?

aus*_*len 9

p

参数应该是指向void的指针.指针的值以实现定义的方式转换为可打印字符序列.

参考


Bas*_*tch 5

输出格式%p是特定于实现的.并非每个C实现都在具有相同大小的地址的计算机上int.有intptr_t来自<stdint.h>