C ++ reinterpret_cast

时间:2011-01-28 11:16:19

标签: c++ memory reinterpret-cast

在运行此程序时:

#include <iostream>
int main()
{
char *name = "abc";
int i = reinterpret_cast<int>(name);
std::cout<<i<<std::endl;
return 0;
}

我得到了以下输出:

4202656

这个数字代表什么?它是一个内存地址吗?但是,内存地址是什么? “abc”不是作为内存中的字符数组存储的吗?

感谢。

4 个答案:

答案 0 :(得分:4)

未定义。 sizeof(int)可能不等于sizeof(char *)。我不确定这里是否也适用严格的别名规则。

在实践中,假设它们的大小确实相等(大多数32位平台),4202656将表示数组中第一个字符的地址。我会这样干得更清楚:

#include <iostream>
int main()
{
   const char *name = "abc"; // Notice the const. Constant string literals cannot be modified.
   std::cout << static_cast<const void*>(name) << std::endl;
}

答案 1 :(得分:3)

这可能是角色'a'的地址 虽然我不认为这是有保证的(即int可能不足以保存地址)。

答案 2 :(得分:0)

您可能希望查看问题:casting via void* instead of using reinterpret_cast

简短的回答是它可以是任何东西。

答案 3 :(得分:0)

这是“abc”的第一个字符的内存地址,所以“a”。因为数组是指向数组第一个值的指针 如果您执行cout << *(name++),则会打印“b”。

因此,在投射name时,您会尝试投射指向“a”的地址