我在大学里学C。
我试图在Windows 7/8上设置一个编程环境,但遇到了一个问题
此代码:
int main()
int *p;
printf("%d",sizeof(p));
return 0;
}打印4而不是8 (8在大学印刷)。我能做什么?
我的Windows是64位和x64处理器。
发布于 2012-11-12 12:22:33
您可能会将代码编译到32位应用程序中。您需要将其编译为64位应用程序。检查编译器设置。不重要的是你的操作系统是64位。
发布于 2012-11-12 13:29:45
这里的“问题”是取决于编译架构的结果。
C中的基本类型(如int、double、char)没有预定义的大小;这取决于编译器对哪种类型使用哪种大小。
至于指针,您通常希望能够处理计算机上可用的任何内存位置。在32位架构上,地址范围为2^32。由于指针只不过是一个引用内存位于的地址的数字,2^32个地址(即范围为4 Bytes)正好适合。
对于64位系统,为了寻址所有内存,需要2^64 (即8个字节)的范围。
因此,指针大小需要依赖于系统架构。
请记住:所有指针类型(无论是int*, char*, double*还是其他任何类型)都有相同的大小!在32位上使用整数和整数指针可能会有点混乱,因为在大多数体系结构中,int的大小也是4字节。
https://stackoverflow.com/questions/13343619
复制相似问题