int a[5]之a与&a

时间:2021-05-20 16:23:13

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)“

(我测试了几个例子,他们都说明只要指针访问的不是系统禁止访问的地址,即使指针越界编译器也不会提示错误)