在64位系统上使用printf%016x与%p的打印地址

cru*_*ice 2 c printf pointers

我目前正在阅读有关C和汇编语言的书时遇到了一些麻烦。作者使用32位环境,而我使用64位。问题是作者经常使用

printf("%08x", &var);
Run Code Online (Sandbox Code Playgroud)

打印在32位上正常工作的地址。但是,当我在64位上运行此程序时,我只得到地址的一半,而%p却给了我整个地址。我当然使用%016x代替%08x

作者仅%p用于指针。那么我什么时候应该使用什么呢?

Yu *_*Hao 5

要在中打印指针printf,根据C标准,使用%pwith void *type是方法。

printf("%p", (void *)&var);
Run Code Online (Sandbox Code Playgroud)