int a[5]之a与&a
int main()
{
int a[5]={1,2,3,4,5};
int *ptr=(int *)(&a+1);
printf("%d,%d",*(a+1),*(ptr-1));
return 0;
}
结果为:
2,5
&a+1=&a+5*sizeof(int),也就是说ptr现在正指向a[5]~_~
主要原因是a代表了整个数组,而ptr定义成int *,所以&a+1中加了5*sizeof(int);ptr-1只是“减去了一个sizeof(int)“
(我测试了几个例子,他们都说明只要指针访问的不是系统禁止访问的地址,即使指针越界编译器也不会提示错误)