C 为什么在64位计算机上我的指针大小是4字节?

C 为什么在64位计算机上我的指针大小是4字节?,c,byte,64-bit,C,Byte,64 Bit,编译器说我的指针是4字节,但我的计算机是64位操作系统。 它不应该说是8字节而不是4字节吗? 是什么导致了这个问题?IDE正在这样做吗?也许,编译器可能 int *p; printf("%d", (int)sizeof(p)); compiler says: 4 编译器和编译器选项定义实际目标。操作系统并不重要,因为您可以在32位机器上编译64位代码(您将无法执行它),而在64位机器上编译32位代码 如果指针的sizeof为4字节,则表示编译32位代码。在许多64位操作

编译器说我的指针是4字节,但我的计算机是64位操作系统。 它不应该说是8字节而不是4字节吗? 是什么导致了这个问题?IDE正在这样做吗?也许,编译器可能

int *p;
printf("%d", (int)sizeof(p));


compiler says: 4

编译器和编译器选项定义实际目标。操作系统并不重要,因为您可以在32位机器上编译64位代码(您将无法执行它),而在64位机器上编译32位代码


如果指针的sizeof为4字节,则表示编译32位代码。在许多64位操作系统上,您可以执行32位代码。

我一直在寻找相同的答案,但我发现我必须进行更改 //生成->配置管理器->活动解决方案平台到x64// 使其成为8字节的值。
如果您正在使用Visual Studio Community 2019,希望这对您有所帮助。

请尝试创建一个向导,向我们展示如何检查指针的大小。您的编译器是什么?如何编译?您是否可以在64位主机上编译32位体系结构(某些Visual Studio版本的默认行为)?
printf(((void*)需要%d位\n),(int)(CHAR_-BIT*sizeof(void*))您显示的代码实际上有,因为您有不匹配的格式规范和参数类型。
sizeof
运算符会产生一个类型为
size\u t
的值,如果要打印它,应该使用
“%zu”
。有关详细信息,请参见例如。它似乎有效的原因可能与您得到意外结果的原因相同:您正在为32位目标构建。您仍然需要描述编译/链接代码时的构建选项。