可以解释一些为什么p[-2]是可以编译运行,然后还有值的啊?

 

p=&a[5],相当于p指针指向a数组的第5个元素,那么p[-2]相当于指向第5个元素之前的两个元素,也就是a[3],就是54。内存还在你的程序控制范围内,所以没问题的,不越界。越界是指访问到了你程序控制的内存之外的内存

你可以这么理解,数组下标访问,p[i]相当于 *(p+i)。p[-2]就是p指针指向位置的往前面两个位置,p=&a[5]此时指向a数组中第6个元素(下标从0开始)也就是2,它向前移动2个位置,是数组a的第4个元素也就是54