1

在运行这个程序时:

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

我得到以下输出:

4202656

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

谢谢。

4

4 回答 4

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;
}
于 2011-01-28T11:22:38.917 回答
3

它可能是字符“a”的地址。
虽然我不认为这是有保证的(即 int 可能不够长来保存地址)。

于 2011-01-28T11:22:44.610 回答
0

你可能想看看这个问题:casting via void* 而不是使用 reinterpret_cast

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

于 2011-01-28T11:26:00.330 回答
0

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

因此,当 cast 时name,您尝试将指向“a”的地址

于 2011-01-28T11:26:47.493 回答