我们以下面的代码为例
int number = 1;
char * charsequence = (char *)&number //casting the address of number to char *
std::cout << charsequence << endl;
以上代码段会产生以下结果:
☺
如果我更改了数字,则会出现另一个符号。 这很好,真正的问题是,为什么即使每次运行时内存位置(&amp; number)不同,我也总是得到相同的符号?而最重要的部分是为什么我得到符号而不是我的记忆地址?
我认为我所做的演员没有像我想象的那样工作。
编辑:由于它已经关闭,因为我不知道我在问什么,这里有真正的问题:
如何将对象的内存地址打印到控制台?
在编辑时,此问题已经得到解答。请参阅接受的答案
答案 0 :(得分:3)
std::ostream
对operator<<
有一个特殊的重载,当你给它一个char *
时,它不会打印指针的值,而是假设你给了它一个指针,指向一个以null结尾的字符数组中的第一个元素,然后尝试将整个数组打印到终结符。 (这种重载允许您以一种看起来很自然的语法打印C字符串。)
由于您的指针实际上并不指向以null结尾的数组的第一个元素,因此您的程序具有未定义的行为。
如果要打印指针值,则应使用void指针:
std::cout << static_cast<void*>(&number) << "\n";