arr和&arr输出的结果都一样啊

我试了一下发现不加&和加&的结果是一样的,不是必须要把数组的地址给数组指针吗?但为什么我把数组第一个元素的地址给数组指针也可以?这是为什么?

int arr[4] = { 10,20,30,40 };
        int(*temp)[4] = &arr;
        for (int i = 0; i < 4; i++) {
                printf("%d\n", (*temp + i));
        }

int arr[4] = { 10,20,30,40 };
        int(*temp)[4] = arr;
        for (int i = 0; i < 4; i++) {
                printf("%d\n", (*temp + i));
        }

因为数组的地址就是第一个元素的地址