我正在研究一些代码:
int n;
char *ptr;
scanf("%d",&n);
ptr = (char *) &n; // pointer to the integer
printf("\na[0]=%p",*ptr); // print the values at the next 4 memory locations
printf("\na[1]=%p",*(ptr+1));
printf("\na[2]=%p",*(ptr+2));
printf("\na[3]=%p",*(ptr+3));
这段代码给我一个干净的输出
FFFFFFFF
FFFFFFFF
FFFFFFFF
FFFFFFFF
对于 VisualC++ '12 中 win32 设置的 -1 输入。
然而,当我为 x64 架构编译这段代码时,我得到了 -
00000000FFFFFFFF
00000000FFFFFFFF
00000000FFFFFFFF
00000000FFFFFFFF
对于相同的输入值-1。整数的大小在两种架构中都是相同的。 我的问题是为什么内存布局在 4 个位置不全是 F?
最佳答案
printf
的p
说明符需要一个void *
。相反,您传递的是 int
(练习:为什么它是 int
?),因此行为未定义。为您要打印的内容使用正确的说明符(也许是 c
、x
或 u
?)。
关于c - win32 与 x64 代码比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18586277/