在取消引用指向数组的指针时,我得到的地址与指向数组的指针的地址相同

While dereferencing pointer to an array I am getting same address as that of pointer to an array

#include<stdio.h>

int main(void)
{
   int arr[5]={1,2,3,4,5};
   int (*ptr)[5]=&arr;

   printf("ptr=%p\n",ptr);    i am not getting the diff btw both statements
   printf("*ptr=%p\n",*ptr);

   return 0;
}

output:- 
ptr=0xbf8f8178
*ptr=0xbf8f8178

我知道取消引用指向数组的指针我们得到数组名,数组名表示基地址那么这两个语句之间的区别是什么

两个指针地址相同,但类型不同

ptr 是指向 5 个整数的数组的指针。

*ptr 是一个包含 5 个整数的数组。但是,当 "array of T" 类型的表达式用于除 sizeof& 之外的任何上下文时,它会自动转换为 "pointer to T" 类型的表达式,指向数组的第一个元素。在这种情况下,它变成了指向 int.

的指针

显然,数组的起始地址与其第一个元素相同。

printf 中的第一个指针是指向指针的指针

printf 中的第二个指针指向第一个指针指向的第一个元素

但是两个指针的类型不同

查看此图片

来源:https://www.eskimo.com/~scs/cclass/int/sx9b.html