我有一段代码,是在某个地方看到的,我试图弄清楚它是如何工作的,但我无法理解。
这就是代码:
#include <iostream>
using namespace std;
int main() {
int a = 2;
char * p = (char *) &a;
*(p + 1) = 1;
cout << (int *) p << endl;
return 0;
}
我认为在p中存储了变量a的二进制值,如
00000010
。
接着,在下一个地址中存储了00000001
。
当我尝试打印(int *)
p时,它会从该地址取4个字节并将其转换为整数。当我运行程序时,结果并非预期。它只显示了变量
a
的地址,没有观察到任何变化。请问你能解释一下这是如何工作的以及为什么吗?
附注:如果我想显示p的值,它只显示2而不是我预期的258。
*(p + 1) = 1;
是未定义行为。 - 101010a = (a & ~0xFF00) | 0x0100
很慢吗? - Andy Brownsizeof (int) > sizeof (char)
是正确的,但实际上应该是>=
,这使得访问int
的第二个char
的代码可能会导致未定义行为。 - unwind