我正在大学学习C.
我尝试在Windows 7/8上设置编程环境并遇到问题
此代码:
int main()
int *p;
printf("%d",sizeof(p));
return 0;
}
打印4而不是8(8在大学打印)。 我该怎么办?
我的Windows是64位和x64处理器。
答案 0 :(得分:5)
您可能将代码编译为32位应用程序。您需要将其编译为64位应用程序。检查编译器设置。你的操作系统是64位并不重要。
答案 1 :(得分:1)
这里的“问题”是结果取决于编译架构。
C中的基本类型(例如int
,double
,char
)没有预定义的大小;由编译器决定使用哪种类型的大小。
对于指针,您通常希望能够解决计算机上可用的任何内存位置。 在32位架构上,地址范围为2 ^ 32。由于指针只是一个指向内存所在地址的数字,因此2 ^ 32地址(即4字节范围)适合。
对于64位系统,为了寻址所有内存,需要2 ^ 64(即8字节)的范围。
因此,指针大小需要依赖于系统架构。
请记住:所有指针类型(无论是int*, char*, double*
还是其他)都具有相同的大小!因此,在32位上使用整数和整数指针会引起一些混乱,因为int
在大多数体系结构上的大小都是4字节。