c - win32 与 x64 代码比较

标签 c 64-bit

我正在研究一些代码:

    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?

最佳答案

printfp 说明符需要一个void *。相反,您传递的是 int(练习:为什么它是 int?),因此行为未定义。为您要打印的内容使用正确的说明符(也许是 cxu?)。

关于c - win32 与 x64 代码比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18586277/

相关文章:

c++ - 如何在 PBC 中存储序列化元素?

asp.net - 在64位环境下调试c#代码时出错

c - 写入内核模块时内核非法指令

从指针复制地址

C 程序 - 值不添加到循环中的 vector

c - 如何从文件中读取所有字符并将其存储在二维数组中而不使用\n?

c# - c#中的64位应用程序中的32位dll

eclipse - Windows 7 64 位 : doesn't install "Windows Binaries for Mercurial" 上的 MercurialEclipse

vba - Virtual Protect 的 64 位声明是否正确?

c++ - Windows x64 的近绝对调用 (0xFF 0x15) 寻址