C 在64位机器上,每个指针变量的大小是8字节,如何调整?
我介绍了指针算法,以及不能将一种数据类型的指针分配给另一种数据类型的事实。例如,下面的声明是不正确的C 在64位机器上,每个指针变量的大小是8字节,如何调整?,c,pointers,C,Pointers,我介绍了指针算法,以及不能将一种数据类型的指针分配给另一种数据类型的事实。例如,下面的声明是不正确的 double x = 10; int *ptrInt = &x; 我们已将双变量的地址分配给“指向整数的指针”。与整数相比,Double需要8个字节,整数需要4个字节,因此整数指针将截断额外的4个字节 但是,为什么任何指针变量的大小都是8个字节,这也意味着它不会截断额外的4个字节,应该可以正常工作(即使它没有) 我有这个疑问。有人能帮我澄清一下吗?为什么任何指针变量的大小都是8
double x = 10;
int *ptrInt = &x;
我们已将双变量的地址分配给“指向整数的指针”。与整数相比,Double需要8个字节,整数需要4个字节,因此整数指针将截断额外的4个字节
但是,为什么任何指针变量的大小都是8个字节,这也意味着它不会截断额外的4个字节,应该可以正常工作(即使它没有)
我有这个疑问。有人能帮我澄清一下吗?为什么任何指针变量的大小都是8字节?指针变量包含地址。
64位
系统上的地址大小为8字节
,无论指针变量是指向int
还是char
还是float
对象,因为64位
指针支持8字节
地址空间。指针就是地址。变量(x)是该地址上的变量。如果您将double的地址分配给int指针并取消对int指针的引用,那么您将获得sizeof(int)字节。这是一个奇怪的工作流程,所以你必须跳过一些障碍来说“是的,我真的很想这样做”。你可能不知道指针的大小和它指向的对象的大小无关。64位指针支持64位地址空间。例如,假设您有一个包含2**34个字符的变量的数组。您需要至少34个地址位来寻址数组的每个元素,即使每个元素本身只有1个字节。请考虑printf(“指针大小:%lu字节\n”,sizeof(void*)代码>