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