Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在64位机器上,每个指针变量的大小是8字节,如何调整?_C_Pointers - Fatal编程技术网

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*)