Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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语言中指针算法访问数组的索引限制_C_Arrays_Pointers_Math_Integer - Fatal编程技术网

C语言中指针算法访问数组的索引限制

C语言中指针算法访问数组的索引限制,c,arrays,pointers,math,integer,C,Arrays,Pointers,Math,Integer,我将一个指向Python中定义的大数组(数百万行)的指针传递给一个具有ctypes的C函数 在C部分中,我对这个数组执行指针算法来访问它的值。现在我得到了一些奇怪/错误的计算,我认为这是因为指针运算 据我所知,指针总是整数,所以我可以访问的数组的最后一个条目将是该特定系统的最大整数值 那么,如果我试图访问*(array+I),如果我大于最大整数,会发生什么?如果是这种情况,我如何访问阵列的其余入口?大多数现代操作系统都使用a,这意味着指针能够表示虚拟地址空间中的任何地址 在64位系统上,指针是6

我将一个指向Python中定义的大数组(数百万行)的指针传递给一个具有ctypes的C函数

在C部分中,我对这个数组执行指针算法来访问它的值。现在我得到了一些奇怪/错误的计算,我认为这是因为指针运算

据我所知,指针总是整数,所以我可以访问的数组的最后一个条目将是该特定系统的最大整数值


那么,如果我试图访问
*(array+I)
,如果我大于最大整数,会发生什么?如果是这种情况,我如何访问阵列的其余入口?

大多数现代操作系统都使用a,这意味着指针能够表示虚拟地址空间中的任何地址

在64位系统上,指针是64位的,在32位系统上,指针是32位的

在32位操作系统上,每个进程的大小为2^32字节,即几十亿字节(即几GB)

在64位操作系统上,每个进程的虚拟地址空间为2^64字节,这是一个天文数字

那么,如果我试图访问*(array+I),其中我大于最大[指针],会发生什么

在具有平面内存模型的系统上,您永远不会遇到这种情况,因为指针总是足够大,足以表示进程虚拟地址空间中的任何地址

从理论上讲,您可能会在具有。然而,这肯定不是你所描述的问题的原因

据我所知,指针总是整数,所以我可以访问的数组的最后一个条目将是该特定系统的最大整数值

可以合法访问的数组的最后一个元素取决于为数组分配的内存量