两个int指针的差大于INT_MAX

时间:2018-09-15 13:40:09

标签: c

指向同一数组元素的两个int*指针之差是否可能大于INT_MAX

如果是的话,我该如何访问INT_MAX之外的数组元素?

2 个答案:

答案 0 :(得分:2)

  

同一数组的元素上两个int*指针的差是否可能大于INT_MAX

是的,这是可能的。数组可以大于INT_MAX个元素。这样的大型 array 很少使用。

C提供ptrdiff_t作为指针减法的整数类型。

int *pointer_a;
int *pointer_b;
...
// pointer_a, pointer_b point to elements in the same array object.
ptrdiff_t diff = pointer_a - pointer_b;

// Use `%td` to print a `ptrdiff_t`.
printf("diff %td\n", diff);
  

当减去两个指针时,两个指针都应指向同一数组对象的元素,或者指向数组对象的最后一个元素;结果是两个数组元素的下标不同。结果的大小是实现定义的,其类型(有符号整数类型)是在ptrdiff_t中定义的<stddef.h> ... C11dr§6.5.69


  

如何访问INT_MAX之外的数组元素?

要为int范围之外的元素建立索引,请使用指定为有效的类型。

size_t是一些 unsigned 类型,其类型指定为足以索引所有数组。

// some big array, maybe in global memory.
int big[10000000000];

....
size_t index = foo();
printf("big[%zu] = %d\n", index, big[index]);

答案 1 :(得分:-3)

这听起来像是无符号整数减法的问题:如果从“低位”减去“高位”指针,则会得到负差。如果您将负数表示为无符号数,它将看起来像一个很大的数字...