算术运算符如何使用c中的地址?

时间:2018-08-29 13:37:00

标签: 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;
 }

输出:

  0x7ffe583f4ba0    0x7ffe583f4ba4  1

为什么差1?不应该是4。

2 个答案:

答案 0 :(得分:5)

将此表达式(arr+1)-arr视为

0x7ffe583f4ba0 + 1 - 0x7ffe583f4ba0

它将给出1

当您减去指向同一数组的两个指针时,它将给出这些指针之间的元素数。
按照相同的逻辑,如果将指向int的数组的指针加1,则它将指向它的下一个元素(一个单位)而不是下一个sizeof(int)元素。

答案 1 :(得分:0)

当您使用+-执行指针算术时,要考虑所指向类型的大小:

int main() {
    int arr[2] = { 1, 2 };
    int *p = arr;
    printf("%p -> %d\n", (void *)p, *p);
    p++;
    printf("%p -> %d\n", (void *)p, *p);
    return 0;
}

输出:

0115FCCC -> 1
0115FCD0 -> 2