在运行此程序时:
#include <iostream>
int main()
{
char *name = "abc";
int i = reinterpret_cast<int>(name);
std::cout<<i<<std::endl;
return 0;
}
我得到了以下输出:
4202656
这个数字代表什么?它是一个内存地址吗?但是,内存地址是什么? “abc”不是作为内存中的字符数组存储的吗?
感谢。
答案 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”的地址