在运行这个程序时:
#include <iostream>
int main()
{
char *name = "abc";
int i = reinterpret_cast<int>(name);
std::cout<<i<<std::endl;
return 0;
}
我得到以下输出:
4202656
这个数字代表什么?是内存地址吗?但是,内存地址是什么?“abc”不是作为字符数组存储在内存中吗?
谢谢。
在运行这个程序时:
#include <iostream>
int main()
{
char *name = "abc";
int i = reinterpret_cast<int>(name);
std::cout<<i<<std::endl;
return 0;
}
我得到以下输出:
4202656
这个数字代表什么?是内存地址吗?但是,内存地址是什么?“abc”不是作为字符数组存储在内存中吗?
谢谢。
它是未定义的。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;
}
它可能是字符“a”的地址。
虽然我不认为这是有保证的(即 int 可能不够长来保存地址)。
你可能想看看这个问题:casting via void* 而不是使用 reinterpret_cast
简短的回答是它可以是任何东西。
这是“abc”第一个字符的内存地址,所以是“a”。因为数组是指向数组第一个值的指针。
如果你cout << *(name++)
正常打印“b”。
因此,当 cast 时name
,您尝试将指向“a”的地址