Can't understand how *ptr size is 20

int main()
{
int arr[] = { 3, 5, 6, 7, 9 };
int *p = arr;
int (*ptr)[5] = &arr; // What does this line denote

printf("p = %p, ptr = %p\n", p, ptr); 
printf("*p = %d, *ptr = %p\n", *p, *ptr); 
  
printf("sizeof(p) = %lu, sizeof(*p) = %lu\n", 
                      sizeof(p), sizeof(*p)); 
printf("sizeof(ptr) = %lu, sizeof(*ptr) = %lu\n",  
                    sizeof(ptr), sizeof(*ptr)); 
return 0; 

}

*ptr size is 20 because it’s one element size is equal size of whole arr
as arr array contain 5 element so its size is 20
if it contain 10 elements it size will be 40

for(int i=0;i<5;i++){
cout<<arr[i]<<" "<<ptr[0][i]<<endl;
}
print it both will give same ans
as ptr is pointer to an array it is same as 2D array