不支持在c或c ++中添加两个指针。 为什么?

为什么在c或c ++中不支持添加两个指针。

当我做,

int *ptr,*ptr1; int sum = ptr + ptr1; 

C或C ++抛出错误。 虽然它支持,

 int diff = ptr - ptr1; 

指针包含地址。 添加两个地址是没有意义的,因为你不知道你会指出什么。 减去两个地址可以计算这两个地址之间的偏移量,这在某些情况下可能非常有用。

编辑:为了解决寻找中期的共同愿望,请考虑这一点(仅作为示例):

 #include  int main (int argc, char **argv){ int arr[] = {0,1,2,3,4,5,6,7,8,9}; int *ptr_begin = arr; int *ptr_end = &arr[9]; int *ptr_mid = ptr_begin + (ptr_end - ptr_begin)/2; printf("%d\n", *ptr_mid); } 

我很确定你总是可以提出一个偏移计算,让你可以通过添加来实现你想要的目标。

说白了,两个指针之间的差异给出了可以存储在两个指针之间的类型的元素数量,但添加它们并不能提供任何有意义的function。 如果没有有意义的function,那么不支持它就没有意义。

实际上添加两个地址可能很有用,您可能需要知道两个地址之间的中间地址,例如(a + b)/ 2(对于想要将指针视为门牌号的人来说,这会给他一个数字。房子在两个房子之间的中间),我认为应该允许添加两个地址,因为你无论如何都可以使用演员表:

 int *ptr,*ptr1; int sum = (int)ptr + (int)ptr1; 

编辑:我不是说在某些情况下使用添加地址是强制性的,但是当我们知道如何使用它时它会很有用。