数组地址有关问题

数组地址问题void main(){int a[5] {10, 20, 30, 40, 50}int *ptr (int *)(&a + 1)printf(%d, %d,

数组地址问题
void main()
{
  int a[5] = {10, 20, 30, 40, 50};
  int *ptr = (int *)(&a + 1);
  printf("%d, %d", *(a+1), *(ptr-1));
   
}


*(a+1)输出20没有问题,(&a + 1) 为什么就指到了数组尾部?
*(ptr - 1) = 50;

[解决办法]
1. a和&a[0]都是数组第一个元素的地址,&a是整个数组的地址,他们的值尽管是一样的,但是数据类型是不同的。
2. 指针的加减运算和其类型有关。比如&a + 1中的1就是一个sizeof(a)的大小