1.声明指向数组的指针:
int (*p)[5]=&arr;
这里的&也可以不写,因为数组名本身就表示数组的首地址
2.声明指向数组内部元素的指针:
int *p = &arr;
int *p= arr;
int *p = &arr[0]
上面三种声明方式都是合法且等价的
int a[5]={1,2,3,4,5};
int *p=a; //指向数组元素的指针,用来访问数组内部的元素,单位长度是sizeof(int)
int (*q)[5]=&a; //指向整个数组的指针,用来访问紧挨着的不同数组,单位长度是sizeof(int)*len(arr)
printf("%d : %d\n",p,q); //这两个结果相同,都是a数组的起始地址,也是a[0]的地址
printf("%d : %d\n",p+1,q+1); //这两个结果不同,第一个实际值+4,第二个实际值+20
总结:指向数组的指针的单位长度是数组的长度,指向数组内部元素的指针