任何人都可以解释一下这段代码是如何产生 16843009
的吗?它是如何工作的?
正如我在测试中看到的那样,(int *)&x
结果为 0x61ff1b
,据我所知,这是数组中第一个元素的地址。 *(int *)&x
的结果如何是 16843009
?谢谢。
#include <iostream>
using namespace std;
int main()
{
char x[5] = {1, 1, 1, 1, 1};
cout << *(int *)&x;
return 0;;
}
最佳答案
如果我们将 16843009 写成二进制,我们将得到 1000000010000000100000001
。用额外的零填充我们得到:00000001000000010000000100000001
。每 8 位(即一个字符)的值为 00000001
,即 1
。
&x
是指向 char 数组的指针(特别是 char(*)[5]
)。这被重新解释为指向 int 的指针。在您的系统上,int
可能是 4 个字节,所有这四个字节都单独设置为 1,这意味着您得到一个每 8 位都设置为 1 的 int。
关于c++ - 使用 C++ 将 char 数组转换为 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56198610/