c++ - 打印 64 位 C++ 完整内存地址

标签 c++ 64-bit cout memory-address

当我在 64 位机器上为 C++ 程序编写代码时,我注意到打印变量的地址(例如)只返回 12 个十六进制字符,而不是 16 个。这是一个示例代码:

int a = 3 ;
cout sizeof(&a) << " bytes" << endl ;
cout << &a << endl ;

输出是:

8 bytes

0x7fff007bcce0

很明显,一个变量的地址是8字节(64位系统)。但是当我打印它时,我只得到 12 个十六进制数字而不是 16 个。

  • 这是为什么?我认为这是因为 4 个“丢失”的数字 是前导零,未打印。但这只是我的 思想,我希望有一个明确的和技术上正确的 回答。

  • 如何打印整个地址?是否有内置解决方案, 或者我应该手动使用“sizeof”以获得真正的长度和 然后向地址添加正确数量的零?

请原谅,我在谷歌上搜索了一天来回答我这个愚蠢的问题,但我找不到答案。我只是一个新手。 (在 stackoverflow 上我没有找到任何关于我需要知道的问题/答案,但也许我错了。)

最佳答案

有人在这里问了一个非常相似的问题:c++ pointer on 64 bit machine

希望这有帮助:)

要打印带前导零的完整 64 位地址,您可以使用:

std::cout
<< "0x"
<< std::hex
<< std::noshowbase
<< std::setw(16)
<< std::setfill('0')
<< n
<< std::endl ;

来自:How can I pad an int with leading zeros when using cout << operator?

关于c++ - 打印 64 位 C++ 完整内存地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30325990/

相关文章:

C++如何更改 map 元素的值

c++ - 观察者模式的线程实现 - C++

linux - IDA Pro有时会加载源文件,是什么原因?

gcc - x86_64 中运行时代码替换的绝对寻址

c++ - 64 位系统上指针值的范围

c++ - 将 int 转换为字符串数组

java - 将 Launch4J 配置为仅使用 32 位 JVM

c++ - 为什么我的 cout 语句没有打印一半?

c++ - 为什么 << 运算符会用 cout 截断字符?

c++ - 有命名空间和没有命名空间的加载时间差异