Windows 64位平台上void指针的大小为什么是4?

8
我有以下打印数字4的程序。我正在64位Windows 7上运行此程序。对于64位平台,它不应该打印8吗?提前感谢。
#include <stdio.h>
void main()
{
    printf("%d", sizeof(void*));
}

这不取决于编译器吗? - crush
7
你确定你正在构建一个64位的二进制文件吗? - Jon Skeet
你正在使用哪个版本的编译器?如果你的编译器是32位,它将使用WOW64,并且会表现得像普通的32位进程。 - Guanxi
请展示您的编译器调用。 - Carl Norum
推荐:64位C/C++应用程序开发课程 - http://www.viva64.com/en/l/ - user965097
如果您使用的是64位编译器,那么您会遇到不同的问题,因为您无法使用“%d”正确打印sizeof的值。 - Steve Summit
1个回答

15

当您使用编译语言(如C)时,指针的大小不是由您运行代码的平台决定的:它仅取决于为其编译代码的平台。

Windows 7 64位可以运行为32位平台编译的代码。根据您程序的输出,您的代码似乎已编译为Win-32。

在Visual Studio 2010中,转到您的C/C++项目的属性页面,并确保在“平台”下拉列表中选择“Active (x64)”(默认情况下为Win32)。如果下拉列表中没有可用的“x64”,请单击“[配置管理器...]”,并选择项目的平台为“x64”。如果弹出了“从...复制”的对话框,请单击“[确定]”来关闭它。重新编译后,程序应以64位模式运行。


我在同一台电脑上编译了它,也许我必须包含一些编译器或链接器选项。你知道哪些选项可以编译为64位吗?我正在使用Visual Studio 2010。谢谢。 - user2340048
@user2340048,我编辑了答案,解释了如何在Visual Studio中编译x64。 - Sergey Kalinichenko
3
@user2340048 很好!如果问题现在已经解决,请考虑点击答案旁边的灰色勾号接受该答案。这将让其他人知道你不再寻求改进此问题的解决方案,并为你在Stack Overflow上赢得一个新徽章。 - Sergey Kalinichenko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接