转换为char指针

时间:2014-06-14 16:31:06

标签: c++ pointers memory-address

我们以下面的代码为例

int number = 1;
char * charsequence = (char *)&number //casting the address of number to char *
std::cout << charsequence << endl;

以上代码段会产生以下结果:

  

如果我更改了数字,则会出现另一个符号。 这很好,真正的问题是,为什么即使每次运行时内存位置(&amp; number)不同,我也总是得到相同的符号?而最重要的部分是为什么我得到符号而不是我的记忆地址?

我认为我所做的演员没有像我想象的那样工作。


编辑:由于它已经关闭,因为我不知道我在问什么,这里有真正的问题:
如何将对象的内存地址打印到控制台?
在编辑时,此问题已经得到解答。请参阅接受的答案

1 个答案:

答案 0 :(得分:3)

std::ostreamoperator<<有一个特殊的重载,当你给它一个char *时,它不会打印指针的值,而是假设你给了它一个指针,指向一个以null结尾的字符数组中的第一个元素,然后尝试将整个数组打印到终结符。 (这种重载允许您以一种看起来很自然的语法打印C字符串。)

由于您的指针实际上并不指向以null结尾的数组的第一个元素,因此您的程序具有未定义的行为。

如果要打印指针值,则应使用void指针:

std::cout << static_cast<void*>(&number) << "\n";
相关问题