int a[5]之a与&a

    技术2022-05-20  32

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

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


    最新回复(0)