指针大小不正确

时间:2012-11-12 12:20:24

标签: c

  

可能重复:
  What the pointer size in 64 bits computer in C++?

我正在大学学习C.

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

此代码:

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

打印4而不是8(8在大学打印)。 我该怎么办?

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

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

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

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

对于指针,您通常希望能够解决计算机上可用的任何内存位置。 在32位架构上,地址范围为2 ^ 32。由于指针只是一个指向内存所在地址的数字,因此2 ^ 32地址(即4字节范围)适合。

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

因此,指针大小需要依赖于系统架构。

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