关于c语言指针与整数加减法

#include<stdio.h>
int main()
{
    int urn[5] = { 100,200,300,400,500 };
    int* ptr1, * ptr2, * ptr3;

    ptr1 = urn;             //把一个地址赋给指针
    ptr2 = &urn[2];         //把一个地址赋给指针
                            //解引用指针,以及获得指针的地址
    printf("pointer value, dereferenced pointer, pointer address.\n");
    printf("ptr1 = %p, *ptr2 =%d, &ptr1= %p\n", ptr1, *ptr1, &ptr1);

    //指针加法
    ptr3 = ptr1 + 4;
    printf("\nadding an int to a pointer:\n");
    printf("ptr1 + 4 = %p, *(ptr1 + 4) = %d\n", ptr1 + 4, *(ptr1 + 4));

得到结果:pointer value, dereferenced pointer, pointer address.
ptr1 = 000000BB3D0FF998, *ptr2 =100, &ptr1= 000000BB3D0FF9C8

              adding an int to a pointer:
              ptr1 + 4 = 000000BB3D0FF9A8, *(ptr1 + 4) = 500

问ptr1的地址在加整数4之后为什么地址会变成000000BB3D0FF9A8,有没有地址的计算方法。怎么算出ptr1+4的地址。

ptr + 4 即 ptr + sizeof(*ptr) * 4

ptr加4以后就是它指向的下一个整形,一个指针变量占4个字节