2

可能重复:
C++ 中 64 位计算机的指针大小是多少?

我在大学学习C。

我尝试在 Windows 7/8 上设置编程环境并遇到问题

这段代码:

int main()
  int *p;
  printf("%d",sizeof(p));
  return 0;
}

打印 4 而不是 8(大学打印 8)。我能做些什么?

我的 Windows 是 64 位和 x64 处理器。

4

2 回答 2

5

您可能会将代码编译成 32 位应用程序。您需要将其编译为 64 位应用程序。检查您的编译器设置。您的操作系统是 64 位并不重要。

于 2012-11-12T12:22:33.203 回答
1

这里的“问题”是取决于编译架构的结果。

C 中的基本类型(例如int, double, char)没有预定义的大小;由编译器决定为哪种类型使用哪种大小。

至于指针,您通常希望能够寻址您机器上可用的任何内存位置。在 32 位架构上,地址范围是 2^32。由于指针只不过是一个引用内存所在地址的数字,因此 2^32 个地址(即 4 个字节的范围)就可以了。

对于 64 位系统,为了寻址所有内存,需要 2^64(即 8 个字节)的范围。

因此,指针大小需要取决于系统架构。

请记住:所有指针类型(无论是它int*, char*, double*还是其他)都具有相同的大小!因此,在 32 位上使用整数和整数指针可能会有点混乱,因为int在大多数体系结构上也有 4 个字节的大小。

于 2012-11-12T13:29:45.377 回答