【发布时间】:2018-10-11 10:38:55
【问题描述】:
编译器说我的指针是 4 字节,但我的电脑是 64 位操作系统。 它不应该说它是 8 个字节而不是 4 个字节吗? 是什么导致了这个问题? IDE 是这样做的吗?也许,编译器也许?
int *p;
printf("%d", (int)sizeof(p));
compiler says: 4
【问题讨论】:
-
请尝试创建一个Minimal, Complete, and Verifiable Example 向我们展示您如何检查指针的大小。
-
你的编译器是什么?你如何编译?您可能会在 64 位主机上编译 32 位架构(某些 Visual Studio 版本的默认行为)?
-
printf("(void*) needs %d bits\n", (int)(CHAR_BIT * sizeof (void*))); -
您显示的代码实际上具有undefined behavior,因为您的格式规范和参数类型不匹配。
sizeof运算符产生size_t类型的值,如果你想打印它,你应该使用"%zu"。参见例如thisprintfreference 了解详情。它似乎起作用的可能原因与您得到意外结果的原因相同:您正在为 32 位目标构建。 -
您仍然需要描述编译/链接代码时的构建选项。