算术运算符如何处理c中的地址?

Viv*_*vek 0 c pointers

int main(void){
   int arr[] = {1, 2, 3, 4, 5, 6};
   printf("%p\t%p\t%d\n",arr,arr+1,(arr+1)-arr);
   return 0;
 }
Run Code Online (Sandbox Code Playgroud)

输出:

  0x7ffe583f4ba0    0x7ffe583f4ba4  1
Run Code Online (Sandbox Code Playgroud)

为什么差异1?不应该是4.

hac*_*cks 5

把这个表达(arr+1)-arr看作是

0x7ffe583f4ba0 + 1 - 0x7ffe583f4ba0
Run Code Online (Sandbox Code Playgroud)

它会给1.

当你减去指向同一个数组的两个指针时,它会给出这些指针之间的元素数量.
通过相同的逻辑,如果将指针递增到1的数组,int那么它将指向它的下一个元素(一个单元)而不是指向下一个sizeof(int)元素.